public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-4859] Use error_mark_node after error in convert
@ 2023-10-23 10:55 Andrew Pinski
  0 siblings, 0 replies; only message in thread
From: Andrew Pinski @ 2023-10-23 10:55 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:85e930ac8557c444680b5b29a0a13a14ea6672b5

commit r14-4859-g85e930ac8557c444680b5b29a0a13a14ea6672b5
Author: Andrew Pinski <pinskia@gmail.com>
Date:   Fri Oct 20 14:49:32 2023 -0700

    Use error_mark_node after error in convert
    
    While working on PR c/111903, I Noticed that
    convert will convert integer_zero_node to that
    type after an error instead of returning error_mark_node.
    From what I can tell this was the old way of not having
    error recovery since other places in this file does return
    error_mark_node and the places I am replacing date from
    when the file was imported into the repro (either via a gcc2 merge
    or earlier).
    
    I also had to update the objc front-end to allow for the error_mark_node
    change, I suspect you could hit the ICE without this change though.
    
    Bootstrapped and tested on x86_64-linux-gnu with no regressions.
    
    gcc/ChangeLog:
    
            * convert.cc (convert_to_pointer_1): Return error_mark_node
            after an error.
            (convert_to_real_1): Likewise.
            (convert_to_integer_1): Likewise.
            (convert_to_complex_1): Likewise.
    
    gcc/objc/ChangeLog:
    
            * objc-gnu-runtime-abi-01.cc (build_objc_method_call): Allow
            for error_operand after call to build_c_cast.
            * objc-next-runtime-abi-01.cc (build_objc_method_call): Likewise.
            * objc-next-runtime-abi-02.cc (build_v2_build_objc_method_call): Likewise.

Diff:
---
 gcc/convert.cc                       | 12 ++++++------
 gcc/objc/objc-gnu-runtime-abi-01.cc  |  3 +++
 gcc/objc/objc-next-runtime-abi-01.cc |  3 +++
 gcc/objc/objc-next-runtime-abi-02.cc |  3 +++
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/gcc/convert.cc b/gcc/convert.cc
index 5357609d8f05..ac6af7026a75 100644
--- a/gcc/convert.cc
+++ b/gcc/convert.cc
@@ -96,7 +96,7 @@ convert_to_pointer_1 (tree type, tree expr, bool fold_p)
 
     default:
       error ("cannot convert to a pointer type");
-      return convert_to_pointer_1 (type, integer_zero_node, fold_p);
+      return error_mark_node;
     }
 }
 
@@ -332,11 +332,11 @@ convert_to_real_1 (tree type, tree expr, bool fold_p)
     case POINTER_TYPE:
     case REFERENCE_TYPE:
       error ("pointer value used where a floating-point was expected");
-      return convert_to_real_1 (type, integer_zero_node, fold_p);
+      return error_mark_node;
 
     default:
       error ("aggregate value used where a floating-point was expected");
-      return convert_to_real_1 (type, integer_zero_node, fold_p);
+      return error_mark_node;
     }
 }
 
@@ -959,7 +959,7 @@ convert_to_integer_1 (tree type, tree expr, bool dofold)
 
     default:
       error ("aggregate value used where an integer was expected");
-      return convert (type, integer_zero_node);
+      return error_mark_node;
     }
 }
 
@@ -1053,11 +1053,11 @@ convert_to_complex_1 (tree type, tree expr, bool fold_p)
     case POINTER_TYPE:
     case REFERENCE_TYPE:
       error ("pointer value used where a complex was expected");
-      return convert_to_complex_1 (type, integer_zero_node, fold_p);
+      return error_mark_node;
 
     default:
       error ("aggregate value used where a complex was expected");
-      return convert_to_complex_1 (type, integer_zero_node, fold_p);
+      return error_mark_node;
     }
 }
 
diff --git a/gcc/objc/objc-gnu-runtime-abi-01.cc b/gcc/objc/objc-gnu-runtime-abi-01.cc
index fbf8307297a5..6f45283b307b 100644
--- a/gcc/objc/objc-gnu-runtime-abi-01.cc
+++ b/gcc/objc/objc-gnu-runtime-abi-01.cc
@@ -700,6 +700,9 @@ build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
 
   lookup_object = build_c_cast (loc, rcv_p, lookup_object);
 
+  if (error_operand_p (lookup_object))
+    return error_mark_node;
+
   /* Use SAVE_EXPR to avoid evaluating the receiver twice.  */
   lookup_object = save_expr (lookup_object);
 
diff --git a/gcc/objc/objc-next-runtime-abi-01.cc b/gcc/objc/objc-next-runtime-abi-01.cc
index 70ab5262e171..9e28976043ea 100644
--- a/gcc/objc/objc-next-runtime-abi-01.cc
+++ b/gcc/objc/objc-next-runtime-abi-01.cc
@@ -846,6 +846,9 @@ build_objc_method_call (location_t loc, int super_flag, tree method_prototype,
 
   lookup_object = build_c_cast (loc, rcv_p, lookup_object);
 
+  if (error_operand_p (lookup_object))
+    return error_mark_node;
+
   /* Use SAVE_EXPR to avoid evaluating the receiver twice.  */
   lookup_object = save_expr (lookup_object);
 
diff --git a/gcc/objc/objc-next-runtime-abi-02.cc b/gcc/objc/objc-next-runtime-abi-02.cc
index 6548c0078e0a..723b47c9cf6f 100644
--- a/gcc/objc/objc-next-runtime-abi-02.cc
+++ b/gcc/objc/objc-next-runtime-abi-02.cc
@@ -1729,6 +1729,9 @@ build_v2_build_objc_method_call (int super, tree method_prototype,
 
   lookup_object = build_c_cast (loc, rcv_p, lookup_object);
 
+  if (error_operand_p (lookup_object))
+    return error_mark_node;
+
   /* Use SAVE_EXPR to avoid evaluating the receiver twice.  */
   lookup_object = save_expr (lookup_object);

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-10-23 10:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-23 10:55 [gcc r14-4859] Use error_mark_node after error in convert Andrew Pinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).