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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED
   Target Milestone|---                         |10.0

--- Comment #4 from Martin Sebor <msebor at gcc dot gnu.org> ---
Partially fixed in r275981.  The test case triggers the six warnings below (the
output with -D_FORTIFY_SOURCE=2 is similar).  What's not "fixed" is that the
warning for buffer overflow is supposed to be -Wstringop-overflow (and with
_FORTIFY_SOURCE the overflow should cause an abort).  But that's a separate
problem.

pr91631.c: In function ‘efa’:
pr91631.c:11:3: warning: ‘strcpy’ offset 3 from the object at ‘es’ is out of
the bounds of referenced subobject ‘a’ with type ‘char[3]’ at offset 0
[-Warray-bounds]
   11 |   strcpy (es[0].a, a);   // missing warning
      |   ^~~~~~~~~~~~~~~~~~~
pr91631.c:3:17: note: subobject ‘a’ declared here
    3 | struct S { char a[3], b[5], c[]; };
      |                 ^
pr91631.c: In function ‘efb’:
pr91631.c:17:3: warning: ‘strcpy’ offset 8 from the object at ‘es’ is out of
the bounds of referenced subobject ‘b’ with type ‘char[5]’ at offset 3
[-Warray-bounds]
   17 |   strcpy (es[0].b, a);   // missing warning
      |   ^~~~~~~~~~~~~~~~~~~
pr91631.c:3:23: note: subobject ‘b’ declared here
    3 | struct S { char a[3], b[5], c[]; };
      |                       ^
pr91631.c: In function ‘efc’:
pr91631.c:23:3: warning: ‘strcpy’ offset [8, 11] from the object at ‘es’ is out
of the bounds of referenced subobject ‘c’ with type ‘char[]’ at offset 8
[-Warray-bounds]
   23 |   strcpy (es[0].c, a);   // missing warning
      |   ^~~~~~~~~~~~~~~~~~~
pr91631.c:3:29: note: subobject ‘c’ declared here
    3 | struct S { char a[3], b[5], c[]; };
      |                             ^
pr91631.c: In function ‘ifa’:
pr91631.c:29:3: warning: ‘strcpy’ offset 3 from the object at ‘is’ is out of
the bounds of referenced subobject ‘a’ with type ‘char[3]’ at offset 0
[-Warray-bounds]
   29 |   strcpy (is[0].a, a);   // warning (good)
      |   ^~~~~~~~~~~~~~~~~~~
pr91631.c:3:17: note: subobject ‘a’ declared here
    3 | struct S { char a[3], b[5], c[]; };
      |                 ^
pr91631.c: In function ‘ifb’:
pr91631.c:35:3: warning: ‘strcpy’ offset 8 from the object at ‘is’ is out of
the bounds of referenced subobject ‘b’ with type ‘char[5]’ at offset 3
[-Warray-bounds]
   35 |   strcpy (is[0].b, a);   // warning (good)
      |   ^~~~~~~~~~~~~~~~~~~
pr91631.c:3:23: note: subobject ‘b’ declared here
    3 | struct S { char a[3], b[5], c[]; };
      |                       ^
pr91631.c: In function ‘ifc’:
pr91631.c:41:3: warning: ‘strcpy’ offset [8, 11] from the object at ‘is’ is out
of the bounds of referenced subobject ‘c’ with type ‘char[]’ at offset 8
[-Warray-bounds]
   41 |   strcpy (is[0].c, a);   // missing warning
      |   ^~~~~~~~~~~~~~~~~~~
pr91631.c:3:29: note: subobject ‘c’ declared here
    3 | struct S { char a[3], b[5], c[]; };
      |                             ^

Reply via email to