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

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-05-02
     Ever confirmed|0                           |1
      Known to fail|                            |4.9.3, 5.3.0, 6.0

--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> ---
Confirmed with today's top of trunk (see the simple test case below).  I think
a warning should (might?) be doable.

Since in both C and C++ a function that takes a pointer to an array of constant
size can be passed a pointer to an array of a different size (in C++ this
requires a cast) it's an open question whether this case should also trigger an
abort at runtime.

$ cat v.c && /home/msebor/build/gcc-trunk-git/gcc/xgcc
-B/home/msebor/build/gcc-trunk-git/gcc -O2 -Wall -Wextra -Wpedantic v.c &&
./a.out 
inline void __attribute__ ((always_inline))
f (int (*pa)[3])
{
  __builtin_printf ("%s: %zd\n", __func__, __builtin_object_size (*pa, 0));
}

void __attribute__ ((noclone, noinline))
g (int (*pa)[3])
{
  __builtin_printf ("%s: %zd\n", __func__, __builtin_object_size (*pa, 0));
}

int main ()
{
  int a [3];
  int (*pa)[3] = &a;

  __builtin_printf ("%s: %zd\n", __func__, __builtin_object_size (*pa, 0));

  f (pa);
  g (pa);
}
main: 12
f: 12
g: -1

Reply via email to