From: paolo Date: Tue, 28 Aug 2018 15:01:15 +0000 (+0000) Subject: /cp X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=70775f2c97d4eb1ea12a6cda8b702803cfda3bbf;p=thirdparty%2Fgcc.git /cp 2018-08-28 Paolo Carlini PR c++/86546 * decl.c (finish_case_label): If the type is erroneous early return error_mark_node. /testsuite 2018-08-28 Paolo Carlini PR c++/86546 * g++.dg/other/switch4.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@263921 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7efc8d47d9bf..087beb679fb0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-08-28 Paolo Carlini + + PR c++/86546 + * decl.c (finish_case_label): If the type is erroneous early + return error_mark_node. + 2018-08-27 David Malcolm PR c++/63392 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index d9f4d3489292..7fee3da1f490 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -3662,6 +3662,8 @@ finish_case_label (location_t loc, tree low_value, tree high_value) return error_mark_node; type = SWITCH_STMT_TYPE (switch_stack->switch_stmt); + if (type == error_mark_node) + return error_mark_node; low_value = case_conversion (type, low_value); high_value = case_conversion (type, high_value); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c00761123a6c..59fedafab537 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-08-28 Paolo Carlini + + PR c++/86546 + * g++.dg/other/switch4.C: New. + 2018-08-28 Richard Biener PR tree-optimization/87124 diff --git a/gcc/testsuite/g++.dg/other/switch4.C b/gcc/testsuite/g++.dg/other/switch4.C new file mode 100644 index 000000000000..42acb1b0d953 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/switch4.C @@ -0,0 +1,6 @@ +// PR c++/86546 + +class a b; // { dg-error "aggregate" } +void c() { + switch () // { dg-error "expected" } + case b // { dg-error "expected" }