https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83412
Bug ID: 83412 Summary: GCC line directive suppresses warnings Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- For some reason the GCC # line directive suppresses warnings. See bug 83404, comment 2 for the origin of this bug report. $ cat a.c && gcc -O2 -S -Wall a.c #include <string.h> char x[12]; void f (void) { __builtin_strncat (x, "aa", 1); // warning (good) } void g (void) { strncat (x, "aa", 1); // no warning (bug) } a.c: In function ‘f’: a.c:7:3: warning: ‘__builtin_strncat’ output truncated copying 1 byte from a string of length 2 [-Wstringop-truncation] __builtin_strncat (x, "aa", 1); // warning (good) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The problem can be reproduced with another, simpler test case: $ cat a.ii && gcc -O2 -S -Wall a.ii char x[12]; void f (void) { x[13] = 0; // -Warray-bounds (good) } int g (void) { # 12 "a.c" 3 4 return x[13]; // no warning (bug) } a.ii: In function ‘void f()’: a.ii:5:7: warning: array subscript 13 is above array bounds of ‘char [12]’ [-Warray-bounds] x[13] = 0; // -Warray-bounds (good) ~~~~^