https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69543
--- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> --- Breakpoint 4, linemap_compare_locations (set=0x7ffff7ff6000, pre=2147483641, post=post@entry=2147483656) at ../../src/libcpp/line-map.c:1326 (gdb) call inform (2147483641, "pre=2147483641") ../../src/gcc/testsuite/c-c++-common/pr69453.c: In function ‘test’: ../../src/gcc/testsuite/c-c++-common/pr69453.c:6:5: note: pre=2147483641 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") ^ ../../src/gcc/testsuite/c-c++-common/pr69453.c:13:3: note: in expansion of macro ‘YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN’ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN ^ (gdb) p /x 2147483641 $15 = 0x7ffffff9 (gdb) call inform (2147483656, "post=2147483656") ../../src/gcc/testsuite/c-c++-common/pr69453.c:14:12: note: post=2147483656 *++yyvsp = yylval; ~~~~~~~~~^~~~~~~~ (gdb) p /x 2147483656 $8 = 0x80000008 (gdb) p l0 $16 = 2147483641 (gdb) p l1 $17 = 312096 (gdb) p /x l0 $18 = 0x7ffffff9 Then, after the call to: 1338 if ((pre_virtual_p = linemap_location_from_macro_expansion_p (set, l0))) 1339 l0 = linemap_resolve_location (set, l0, 1340 LRK_MACRO_EXPANSION_POINT, 1341 NULL); 1342 we have: (gdb) p /x l0 $21 = 0x80000004 so we have a comparison of locations, one (l0) from a macro expansion, the other not (l1). linemap_compare_locations concludes by executing this: 1368 return l1 - l0; giving this rather nonsensical result: Value returned is $25 = -2147171556 If I'm reading this right, it thus regards the "ignored" as happening *after* the source line of interest, hence the latter erroneously isn't affected by the _Pragma.