| Message ID | 20231022222230.1633485-1-pinskia@gmail.com |
|---|---|
| State | New |
| Headers | show |
| Series | Use error_mark_node after error in convert | expand |
On Mon, Oct 23, 2023 at 12:22 AM Andrew Pinski <pinskia@gmail.com> wrote: > > 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. OK. > 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. > --- > 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 5357609d8f0..ac6af7026a7 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 fbf8307297a..6f45283b307 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 70ab5262e17..9e28976043e 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 6548c0078e0..723b47c9cf6 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); > > -- > 2.39.3 >
diff --git a/gcc/convert.cc b/gcc/convert.cc index 5357609d8f0..ac6af7026a7 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 fbf8307297a..6f45283b307 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 70ab5262e17..9e28976043e 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 6548c0078e0..723b47c9cf6 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);