]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix PR c++/111106: missing ; causes internal compiler error
authorSimon Martin <simon@nasilyan.com>
Fri, 24 May 2024 15:00:17 +0000 (17:00 +0200)
committerSimon Martin <simon@nasilyan.com>
Tue, 4 Jun 2024 15:10:56 +0000 (17:10 +0200)
We currently fail upon the following because an assert in dependent_type_p
fails for f's parameter

=== cut here ===
consteval int id (int i) { return i; }
constexpr int
f (auto i) requires requires { id (i) } { return i; }
void g () { f (42); }
=== cut here ===

This patch fixes this by relaxing the assert to pass during error recovery.

Successfully tested on x86_64-pc-linux-gnu.

PR c++/111106

gcc/cp/ChangeLog:

* pt.cc (dependent_type_p): Don't fail assert during error recovery.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/consteval37.C: New test.

gcc/cp/pt.cc
gcc/testsuite/g++.dg/cpp2a/consteval37.C [new file with mode: 0644]

index dfce1b3c35910d8afe19ccde89b9cb11183b2cbc..edb94a000eae6b8403ac01f69789700337d67176 100644 (file)
@@ -28019,7 +28019,8 @@ dependent_type_p (tree type)
       /* If we are not processing a template, then nobody should be
         providing us with a dependent type.  */
       gcc_assert (type);
-      gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
+      gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type)
+                 || seen_error());
       return false;
     }
 
diff --git a/gcc/testsuite/g++.dg/cpp2a/consteval37.C b/gcc/testsuite/g++.dg/cpp2a/consteval37.C
new file mode 100644 (file)
index 0000000..519d83d
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/111106
+// { dg-do compile { target c++20 } }
+
+consteval int id (int i) { return i; }
+
+constexpr int f (auto i)
+  requires requires { id (i) } // { dg-error "expected" }
+{
+  return i;
+}
+
+void g () {
+  f (42);
+}
+
+// { dg-excess-errors "" }