On 8/26/26 5:50 AM, Jakub Jelinek wrote:
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?
OK.
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