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

Reply via email to