From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1314) id 5FC8A385841A; Mon, 23 Oct 2023 10:55:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5FC8A385841A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1698058547; bh=AlonplbWhHNALLTjF8Z94UL1g1mAKsvjNI6tHFfeHvs=; h=From:To:Subject:Date:From; b=V/i8CoY/LnAtKY0E5ir1J5XzsZCwS+EJCKuKAkDodv4fpQKXqGyOnrKds+ytWaB99 VBVbZy+sM9hcNKuGwE2gtJNf+hx5ESqbyYnk0JSqbKt53JPl6Q8xHEfLS5+JA5+BMo nHoxKGXyN4ovvUcWFHxCLCELc3dEIKBkgiesuiGE= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Andrew Pinski To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-4859] Use error_mark_node after error in convert X-Act-Checkin: gcc X-Git-Author: Andrew Pinski X-Git-Refname: refs/heads/trunk X-Git-Oldrev: 13c0d052478bb45cc97869f5cc333f269aadb36f X-Git-Newrev: 85e930ac8557c444680b5b29a0a13a14ea6672b5 Message-Id: <20231023105547.5FC8A385841A@sourceware.org> Date: Mon, 23 Oct 2023 10:55:47 +0000 (GMT) List-Id: https://gcc.gnu.org/g:85e930ac8557c444680b5b29a0a13a14ea6672b5 commit r14-4859-g85e930ac8557c444680b5b29a0a13a14ea6672b5 Author: Andrew Pinski 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);