]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: Handle error_mark_node in mark_used and mark_single_function
authorEgas Ribeiro <egas.g.ribeiro@tecnico.ulisboa.pt>
Sun, 7 Dec 2025 23:36:09 +0000 (23:36 +0000)
committerJason Merrill <jason@redhat.com>
Fri, 19 Dec 2025 11:13:44 +0000 (18:13 +0700)
These functions should return false for error_mark_node to properly
propagate errors from callers.

gcc/cp/ChangeLog:

* decl2.cc (mark_single_function): Return false for error_mark_node.
(mark_used): Likewise.

gcc/testsuite/ChangeLog:

* g++.dg/DRs/dr3061.C: Remove cascading error expectation.
* g++.dg/cpp0x/initlist31.C: Likewise.

Signed-off-by: Egas Ribeiro <egas.g.ribeiro@tecnico.ulisboa.pt>
Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/decl2.cc
gcc/testsuite/g++.dg/DRs/dr3061.C
gcc/testsuite/g++.dg/cpp0x/initlist31.C

index 8ec9740c8a9e2168e22e70d9cc6b5518ca14edad..93415203d394722feb62c6f10c494fb7080ad126 100644 (file)
@@ -6301,6 +6301,9 @@ mark_single_function (tree expr, tsubst_flags_t complain)
   expr = maybe_undo_parenthesized_ref (expr);
   expr = tree_strip_any_location_wrapper (expr);
 
+  if (expr == error_mark_node)
+    return false;
+
   if (is_overloaded_fn (expr) == 1
       && !mark_used (expr, complain)
       && !(complain & tf_error))
@@ -6343,6 +6346,9 @@ fn_template_being_defined (tree decl)
 bool
 mark_used (tree decl, tsubst_flags_t complain /* = tf_warning_or_error */)
 {
+  if (decl == error_mark_node)
+    return false;
+
   /* If we're just testing conversions or resolving overloads, we
      don't want any permanent effects like forcing functions to be
      output or instantiating templates.  */
index 728829848f54f38f244e5f32821b6975607657a1..bd8b74cdafb0b7c5b1c9d0e7b2fa2dd435c7ac01 100644 (file)
@@ -12,7 +12,7 @@ foo ()
   template for (int x : { 1, })                // { dg-warning "'template for' only available with" "" { target c++23_down } }
     ;
   for (int x : { , })                  // { dg-error "expected primary-expression before ',' token" }
-    ;                                  // { dg-error "unable to deduce" "" { target *-*-* } .-1 }
+    ;
   template for (int x : { , })         // { dg-warning "'template for' only available with" "" { target c++23_down } }
     ;                                  // { dg-error "expected primary-expression before ',' token" "" { target *-*-* } .-1 }
 }
index a8a29f9c853d10b2b667673dbc8ef0527e63696b..6d88edb397ff9a061ff666981ac3487662e62235 100644 (file)
@@ -9,5 +9,5 @@ void f() {
   auto y =
   {
     string(Equation()) // { dg-error "12:'Equation' was not declared" }
-  }; // { dg-error "unable to deduce" }
+  };
 }