From: paolo Date: Thu, 27 Sep 2018 08:33:41 +0000 (+0000) Subject: /cp X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9a555af75d6fbcd83ddb08ec67b0ae528f0478c9;p=thirdparty%2Fgcc.git /cp 2018-09-27 Paolo Carlini PR c++/84940 * semantics.c (finish_unary_op_expr): Check return value of build_x_unary_op for error_mark_node. /testsuite 2018-09-27 Paolo Carlini PR c++/84940 * g++.dg/expr/unary4.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@264664 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 672626c27d98..a28b6150d8f5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-09-27 Paolo Carlini + + PR c++/84940 + * semantics.c (finish_unary_op_expr): Check return value of + build_x_unary_op for error_mark_node. + 2018-09-25 Jakub Jelinek PR c++/87398 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index bf3c63a09a1f..c7f53d1206e8 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2727,13 +2727,14 @@ finish_unary_op_expr (location_t op_loc, enum tree_code code, cp_expr expr, /* TODO: build_x_unary_op doesn't always honor the location. */ result.set_location (combined_loc); - tree result_ovl, expr_ovl; + if (result == error_mark_node) + return result; if (!(complain & tf_warning)) return result; - result_ovl = result; - expr_ovl = expr; + tree result_ovl = result; + tree expr_ovl = expr; if (!processing_template_decl) expr_ovl = cp_fully_fold (expr_ovl); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b7dd6734bca2..4bca40820223 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-09-27 Paolo Carlini + + PR c++/84940 + * g++.dg/expr/unary4.C: New. + 2018-09-26 Indu Bhagat PR gcov-profile/86957 diff --git a/gcc/testsuite/g++.dg/expr/unary4.C b/gcc/testsuite/g++.dg/expr/unary4.C new file mode 100644 index 000000000000..2b58a8dc2cb1 --- /dev/null +++ b/gcc/testsuite/g++.dg/expr/unary4.C @@ -0,0 +1,8 @@ +// PR c++/84940 +// { dg-additional-options -Wno-vla } + +void +foo (int x) +{ + struct {} a[1][x](-a[0]); // { dg-error "wrong type argument to unary minus" } +}