Hi! IMHO we used to conform even before this paper, pedwarning for #line outside of [1,2147483647] range and always warning for [4294967296,inf] range, so we conform even when program with #line outside of [1,2147483647] range is conditionally supported instead of ill-formed. Our conditional-support is that we accept [0,0][2147483648,4294967295] as an extension unless pedantic.
Tested on x86_64-linux and i686-linux, ok for trunk? 2026-08-26 Jakub Jelinek <[email protected]> PR c++/125842 * g++.dg/cpp/line-1.C: New test. * g++.dg/cpp/line-2.C: New test. * g++.dg/cpp/line-3.C: New test. --- a/gcc/testsuite/g++.dg/cpp/line-1.C 2026-08-26 11:33:10.182042590 +0200 +++ b/gcc/testsuite/g++.dg/cpp/line-1.C 2026-08-26 11:42:37.432521776 +0200 @@ -0,0 +1,18 @@ +// C++26 P4136R2 - #line is not in line with existing implementation +// { dg-do compile } +// { dg-options "-Wpedantic" } + +#line 6 +#line 0 // { dg-warning "line number out of range" } +#line 8 +#line 2147483647 // { dg-warning "line number out of range" "" { target c++98_only } } +#line 10 +#line 2147483648 // { dg-warning "line number out of range" } +#line 12 +#line 4294967295 // { dg-warning "line number out of range" } +#line 14 +#line 4294967296 // { dg-warning "line number out of range" } +#line 16 +#line 9223372036854775807 // { dg-warning "line number out of range" } +#line 18 +#line 9223372036854775808 // { dg-warning "line number out of range" } --- a/gcc/testsuite/g++.dg/cpp/line-2.C 2026-08-26 11:36:15.812581436 +0200 +++ b/gcc/testsuite/g++.dg/cpp/line-2.C 2026-08-26 11:40:12.954437325 +0200 @@ -0,0 +1,18 @@ +// C++26 P4136R2 - #line is not in line with existing implementation +// { dg-do compile } +// { dg-options "" } + +#line 6 +#line 0 +#line 8 +#line 2147483647 +#line 10 +#line 2147483648 +#line 12 +#line 4294967295 +#line 14 +#line 4294967296 // { dg-warning "line number out of range" } +#line 16 +#line 9223372036854775807 // { dg-warning "line number out of range" } +#line 18 +#line 9223372036854775808 // { dg-warning "line number out of range" } --- a/gcc/testsuite/g++.dg/cpp/line-3.C 2026-08-26 11:42:51.112340407 +0200 +++ b/gcc/testsuite/g++.dg/cpp/line-3.C 2026-08-26 11:43:12.262059991 +0200 @@ -0,0 +1,18 @@ +// C++26 P4136R2 - #line is not in line with existing implementation +// { dg-do compile } +// { dg-options "-pedantic-errors" } + +#line 6 +#line 0 // { dg-error "line number out of range" } +#line 8 +#line 2147483647 // { dg-error "line number out of range" "" { target c++98_only } } +#line 10 +#line 2147483648 // { dg-error "line number out of range" } +#line 12 +#line 4294967295 // { dg-error "line number out of range" } +#line 14 +#line 4294967296 // { dg-error "line number out of range" } +#line 16 +#line 9223372036854775807 // { dg-error "line number out of range" } +#line 18 +#line 9223372036854775808 // { dg-error "line number out of range" } Jakub
