diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-11-28 00:52:26 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-11-28 00:52:26 +0100 |
commit | d1a27eaefe495c1d9dfc463037fbe22d94d4f40d (patch) | |
tree | 7b71e42a7f747eb5583c274cf567a847a7dee92e | |
parent | 08e10724741986bf04c717ca29a302f2e108f3ad (diff) | |
download | gcc-d1a27eaefe495c1d9dfc463037fbe22d94d4f40d.zip gcc-d1a27eaefe495c1d9dfc463037fbe22d94d4f40d.tar.gz gcc-d1a27eaefe495c1d9dfc463037fbe22d94d4f40d.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/decl.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/pr88187.C | 7 |
4 files changed, 15 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 41e66c0..fea3cf6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2018-11-27 Jakub Jelinek <jakub@redhat.com> + 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 1eee29e..1aaf517 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 d35a3f8..ce80f72 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2018-11-27 Jakub Jelinek <jakub@redhat.com> + 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 0000000..17c14f4 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr88187.C @@ -0,0 +1,7 @@ +// PR c++/88187 +// { dg-do compile } + +template <int> 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 } |