While testing an unrelated C++ patch with "make check-c++-all", I
noticed that r15-6760-g38a13ea4117b96 added a test case that fails with
-fimplicit-constexpr.

The problem is that this test unconditionally expects an error stating
that a non-constexpr function is called, but that function is
auto-magically constexpr'd under -fimplicit-constexpr.

This patch adapts the test to also pass with -fimplicit-constexpr.

Successfully tested on x86_64-apple-darwin19.6.0 with
  make check-c++-all RUNTESTFLAGS="dg.exp=constexpr-asm-5.C"

        PR c++/118277

gcc/testsuite/ChangeLog:

        * g++.dg/cpp1z/constexpr-asm-5.C: Fix with -fimplicit-constexpr.

---
 gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C 
b/gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C
index 1c20b9dfec1..84faacc9b83 100644
--- a/gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C
+++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-asm-5.C
@@ -107,10 +107,10 @@ foo ()
                                // { dg-error "conversion from 'const char\\\*' 
to '\[^']*' in a converted constant expression" "" { target *-*-* } .-2 }
   asm ("" : : : (G {}));       // { dg-error "constexpr string 'data\\\(\\\)' 
must be implicitly convertible to 'const char\\\*'" }
                                // { dg-error "could not convert 
'G\\\(\\\).G::data\\\(\\\)' from 'float' to 'const char\\\*'" "" { target *-*-* 
} .-1 }
-  asm ("" : "=r" (v1), (H {}) (v2)); // { dg-error "call to non-'constexpr' 
function 'short int H::size\\\(\\\) const'" }
-                               // { dg-error "constexpr string 'size\\\(\\\)' 
must be a constant expression" "" { target *-*-* } .-1 }
-  asm ((I {}));                        // { dg-error "call to non-'constexpr' 
function 'const char\\\* I::data\\\(\\\) const'" }
-                               // { dg-error "constexpr string 'data\\\(\\\)' 
must be a core constant expression" "" { target *-*-* } .-1 }
+  asm ("" : "=r" (v1) : (H {}) (v2)); // { dg-error "call to non-'constexpr' 
function 'short int H::size\\\(\\\) const'" "" { target { ! implicit_constexpr 
} } }
+                               // { dg-error "constexpr string 'size\\\(\\\)' 
must be a constant expression" "" { target { ! implicit_constexpr } } .-1 }
+  asm ((I {}));                        // { dg-error "call to non-'constexpr' 
function 'const char\\\* I::data\\\(\\\) const'" "" { target { ! 
implicit_constexpr } } }
+                               // { dg-error "constexpr string 'data\\\(\\\)' 
must be a core constant expression" "" { target { ! implicit_constexpr } } .-1 }
 
   asm ((J (0)));
   asm ("" :: (J (1)) (1));     // { dg-error "constexpr string 'size\\\(\\\)' 
must be a constant expression" }
@@ -180,10 +180,10 @@ bar ()
                                // { dg-error "conversion from 'const char\\\*' 
to '\[^']*' in a converted constant expression" "" { target *-*-* } .-2 }
   asm ("" : : : (G {}));       // { dg-error "constexpr string 'data\\\(\\\)' 
must be implicitly convertible to 'const char\\\*'" }
                                // { dg-error "could not convert 
'G\\\(\\\).G::data\\\(\\\)' from 'float' to 'const char\\\*'" "" { target *-*-* 
} .-1 }
-  asm ("" : "=r" (v1), (H {}) (v2)); // { dg-error "call to non-'constexpr' 
function 'short int H::size\\\(\\\) const'" }
-                               // { dg-error "constexpr string 'size\\\(\\\)' 
must be a constant expression" "" { target *-*-* } .-1 }
-  asm ((I {}));                        // { dg-error "call to non-'constexpr' 
function 'const char\\\* I::data\\\(\\\) const'" }
-                               // { dg-error "constexpr string 'data\\\(\\\)' 
must be a core constant expression" "" { target *-*-* } .-1 }
+  asm ("" : "=r" (v1) : (H {}) (v2)); // { dg-error "call to non-'constexpr' 
function 'short int H::size\\\(\\\) const'" "" { target { ! implicit_constexpr 
} } }
+                               // { dg-error "constexpr string 'size\\\(\\\)' 
must be a constant expression" "" { target { ! implicit_constexpr } } .-1 }
+  asm ((I {}));                        // { dg-error "call to non-'constexpr' 
function 'const char\\\* I::data\\\(\\\) const'" "" { target { ! 
implicit_constexpr } } }
+                               // { dg-error "constexpr string 'data\\\(\\\)' 
must be a core constant expression" "" { target { ! implicit_constexpr } } .-1 }
 
   asm ((J (0)));
   asm ("" :: (J (1)) (1));     // { dg-error "constexpr string 'size\\\(\\\)' 
must be a constant expression" }
-- 
2.44.0

Reply via email to