https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97602
Bug ID: 97602 Summary: #line overflow check incomplete Product: gcc Version: 11.0 Status: UNCONFIRMED Keywords: accepts-invalid Severity: normal Priority: P3 Component: preprocessor Assignee: unassigned at gcc dot gnu.org Reporter: jsm28 at gcc dot gnu.org Target Milestone: --- Preprocessing the following test with -pedantic does not produce a diagnostic, just silent wrapping of the line number. #line 5000000000 By comparison, if you instead have #line 3000000000 then you get a diagnostic t.c:1:7: warning: line number out of range 1 | #line 3000000000 | ^~~~~~~~~~ The code in directives.c:strtolinenum tries to check for overflow after it occurs, with logic "if (reg < reg_prev)" that doesn't cover all cases. Checking before it occurs (allowing properly for the case of UINT_MAX / 10 where overflow depends on the value of the next digit) is needed instead.