From d1a27eaefe495c1d9dfc463037fbe22d94d4f40d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 28 Nov 2018 00:52:26 +0100 Subject: [PATCH] re PR c++/88187 (ICE on (invalid) C++ code when compiled with -std=c++17: Segmentation fault) PR c++/88187 * decl.c (grokdeclarator): Don't diagnose deduction guide errors if !funcdecl_p. * g++.dg/other/pr88187.C: New test. From-SVN: r266537 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/decl.c | 2 +- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/other/pr88187.C | 7 +++++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/other/pr88187.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 41e66c08297..fea3cf66507 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2018-11-27 Jakub Jelinek + PR c++/88187 + * decl.c (grokdeclarator): Don't diagnose deduction guide errors + if !funcdecl_p. + PR c++/88181 * class.c (fixup_attribute_variants): Also propagate TYPE_PACKED to variants. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 1eee29e0d59..1aaf51750ab 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -11276,7 +11276,7 @@ grokdeclarator (const cp_declarator *declarator, if (!tmpl) if (tree late_auto = type_uses_auto (late_return_type)) tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto); - if (tmpl) + if (tmpl && funcdecl_p) { if (!dguide_name_p (unqualified_id)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d35a3f87cd1..ce80f72266d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2018-11-27 Jakub Jelinek + PR c++/88187 + * g++.dg/other/pr88187.C: New test. + PR c++/88181 * g++.dg/debug/pr88181.C: New test. diff --git a/gcc/testsuite/g++.dg/other/pr88187.C b/gcc/testsuite/g++.dg/other/pr88187.C new file mode 100644 index 00000000000..17c14f4e552 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr88187.C @@ -0,0 +1,7 @@ +// PR c++/88187 +// { dg-do compile } + +template struct A; +void f (A ()); // { dg-error "variable or field 'f' declared void" "" { target c++14_down } } + // { dg-error "missing template arguments before '\\(' token" "" { target c++14_down } .-1 } + // { dg-error "'auto' parameter not permitted in this context" "" { target c++17 } .-2 } -- 2.30.2