https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119868

            Bug ID: 119868
           Summary: `'result_decl' not supported by dump_expr<expression
                    error>` is printed instead of `<return value> res` in
                    some cases
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---

Take:
```
#include <array>

auto f(unsigned idx1, unsigned idx2)
{
    std::array<char,33> res;
    __builtin_strcpy(res.data(), "1234567890123456789012345678901234567890");
    return res;
}



auto f1(unsigned idx1, unsigned idx2)
{
    std::array<char,33> res;
    for (unsigned i = idx1 + 1; i < idx2; i++)
        res[i] = 1;
    return res;
}
```

Compile with `-O3 -D_GLIBCXX_ASSERTIONS` (and `-mavx2` on x86_64 to get early
exit vectorization).

We get:
```
<source>: In function 'auto f()':
<source>:6:21: warning: 'void* __builtin_memcpy(void*, const void*, long
unsigned int)' forming offset [33, 40] is out of the bounds [0, 33] of object
'<return value> res' with type 'std::array<char, 33>' [-Warray-bounds=]
    6 |     __builtin_strcpy(res.data(),
"1234567890123456789012345678901234567890");
      |    
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:3:1: note: '<return value> res' declared here
    3 | auto f()
      | ^~~~
<source>: In function 'auto f1(unsigned int, unsigned int)':
<source>:16:16: warning: writing 32 bytes into a region of size 1
[-Wstringop-overflow=]
   16 |         res[i] = 1;
<source>:12:1: note: at offset [32, 33] into destination object ''result_decl'
not supported by dump_expr<expression error>' of size 33
   12 | auto f1(unsigned idx1, unsigned idx2)
      | ^~~~
```

Notice how in the first Warray-bounds warnings we get '<return value> res'
while in the second case we get 'result_decl' not supported by
dump_expr<expression error>.

Reply via email to