Tested x86_64-pc-linux-gnu, applying to trunk.

-- 8< --

Various tests were failing because they rely on non-constexpr functions
staying that way.  The constexpr-diag tests are easier to just skip if
impcx; the reflection tests can be adjusted.

gcc/testsuite/ChangeLog:

        * g++.dg/ext/constexpr-diag3.C: Skip if -fimplicit-constexpr.
        * g++.dg/ext/constexpr-diag6.C: Likewise.
        * g++.dg/reflect/annotations2.C: Handle -fimplicit-constexpr.
        * g++.dg/reflect/p2996-21.C: Likewise.
        * g++.dg/reflect/parm4.C: Likewise.
---
 gcc/testsuite/g++.dg/ext/constexpr-diag3.C  | 1 +
 gcc/testsuite/g++.dg/ext/constexpr-diag6.C  | 1 +
 gcc/testsuite/g++.dg/reflect/annotations2.C | 4 ++--
 gcc/testsuite/g++.dg/reflect/p2996-21.C     | 2 +-
 gcc/testsuite/g++.dg/reflect/parm4.C        | 4 ++--
 5 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/gcc/testsuite/g++.dg/ext/constexpr-diag3.C 
b/gcc/testsuite/g++.dg/ext/constexpr-diag3.C
index 4001b5c71ed..a5b7f6896f6 100644
--- a/gcc/testsuite/g++.dg/ext/constexpr-diag3.C
+++ b/gcc/testsuite/g++.dg/ext/constexpr-diag3.C
@@ -1,4 +1,5 @@
 // { dg-do compile { target c++26 } }
+// { dg-skip-if "" { implicit_constexpr } }
 
 struct A {
   constexpr const char *data () const { return "foo"; }
diff --git a/gcc/testsuite/g++.dg/ext/constexpr-diag6.C 
b/gcc/testsuite/g++.dg/ext/constexpr-diag6.C
index fae3bd33573..a65314d2521 100644
--- a/gcc/testsuite/g++.dg/ext/constexpr-diag6.C
+++ b/gcc/testsuite/g++.dg/ext/constexpr-diag6.C
@@ -1,5 +1,6 @@
 // { dg-do compile { target c++26 } }
 // { dg-require-iconv "IBM1047" }
+// { dg-skip-if "" { implicit_constexpr } }
 // { dg-additional-options "-fexec-charset=IBM1047" }
 
 struct A {
diff --git a/gcc/testsuite/g++.dg/reflect/annotations2.C 
b/gcc/testsuite/g++.dg/reflect/annotations2.C
index 77b581165f1..b3e09792c0e 100644
--- a/gcc/testsuite/g++.dg/reflect/annotations2.C
+++ b/gcc/testsuite/g++.dg/reflect/annotations2.C
@@ -16,8 +16,8 @@ namespace [[=7]] [[= 7 + 1]] [[= 7 + 2]] N
 struct B { constexpr B () : b (42) {} int b; };
 [[=B ()]] int d;
 struct C { constexpr C () : c (42) {} int c; ~C () {} };
-[[=C ()]] int e;                                               // { dg-error 
"temporary of non-literal type 'C' in a constant expression" }
-                                                               // { dg-error 
"annotation does not have structural type" "" { target *-*-* } .-1 }
+[[=C ()]] int e;                                               // { dg-error 
"temporary of non-literal type 'C' in a constant expression" "" { target { ! 
implicit_constexpr } } }
+                                                               // { dg-error 
"annotation does not have structural type" "" { target { ! implicit_constexpr } 
} .-1 }
 struct D { constexpr D () : d (42) {} volatile int d; };
 [[=D ()]] int f;                                               // { dg-error 
"temporary of non-literal type 'D' in a constant expression" }
                                                                // { dg-error 
"annotation does not have structural type" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/g++.dg/reflect/p2996-21.C 
b/gcc/testsuite/g++.dg/reflect/p2996-21.C
index 478be47585e..71c716b8528 100644
--- a/gcc/testsuite/g++.dg/reflect/p2996-21.C
+++ b/gcc/testsuite/g++.dg/reflect/p2996-21.C
@@ -40,7 +40,7 @@ template <typename> struct TCls {
 };
 
 consteval { TCls<void>::sfn(); }       // error: TCls<void>::S4 is not 
enclosed by requires-clause lambda
-// { dg-error "call to non-'constexpr' function 'static void TCls< 
<template-parameter-1-1> >::sfn\\\(\\\) requires \\\(<lambda>\\\)\\\(\\\) 
\\\[with <template-parameter-1-1> = void\\\]'" "" { target *-*-* } .-1 }
+// { dg-error "call to non-'constexpr' function 'static void TCls< 
<template-parameter-1-1> >::sfn\\\(\\\) requires \\\(<lambda>\\\)\\\(\\\) 
\\\[with <template-parameter-1-1> = void\\\]'" "" { target { ! 
implicit_constexpr } } .-1 }
 
 struct S5;
 struct Cls {
diff --git a/gcc/testsuite/g++.dg/reflect/parm4.C 
b/gcc/testsuite/g++.dg/reflect/parm4.C
index dd7606231b4..8867e6adbb6 100644
--- a/gcc/testsuite/g++.dg/reflect/parm4.C
+++ b/gcc/testsuite/g++.dg/reflect/parm4.C
@@ -15,10 +15,10 @@ struct S {
 void
 g (S s)
 {
-  int i0 = s.mfn0 (^^int);  // { dg-error "consteval-only expressions" }
+  int i0 = s.mfn0 (^^int);  // { dg-error "consteval-only expressions" "" { 
target { ! implicit_constexpr } } }
   constexpr int i1 = s.mfn1 (^^int);
   constexpr int i2 = s.mfn2 (^^int);
-  int i3 = s.mfn3 (42, ^^int);  // { dg-error "consteval-only expressions" }
+  int i3 = s.mfn3 (42, ^^int);  // { dg-error "consteval-only expressions" "" 
{ target { ! implicit_constexpr } } }
   info i4 = s.mfn4 ();  // { dg-error "consteval-only variable" }
 }
 

base-commit: 2f34d5c5df1d0382240574d68a499265ed96dbab
-- 
2.53.0

Reply via email to