diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2018-03-28 19:21:41 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2018-03-28 19:21:41 +0000 |
commit | 427d369ce186fbe89562fc16a9d2cdaec37c99c0 (patch) | |
tree | 09714d7c314a9cbc4e8853f99125dfacdb96cb93 /gcc | |
parent | 0a5c6d78b7159352185283c38c1359ecb3204c9f (diff) | |
download | gcc-427d369ce186fbe89562fc16a9d2cdaec37c99c0.zip gcc-427d369ce186fbe89562fc16a9d2cdaec37c99c0.tar.gz gcc-427d369ce186fbe89562fc16a9d2cdaec37c99c0.tar.bz2 |
re PR c++/85028 (ICE on invalid C++ code: in tsubst_default_argument, at cp/pt.c:12340)
/cp
2018-03-28 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/85028
* pt.c (tsubst_default_argument): Early return if the type of the
parameter is erroneous.
/testsuite
2018-03-28 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/85028
* g++.dg/other/default13.C: New.
From-SVN: r258932
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/default13.C | 11 |
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fc7b6b9..b7a4f43 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-03-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/85028 + * pt.c (tsubst_default_argument): Early return if the type of the + parameter is erroneous. + 2018-03-28 Alexandre Oliva <aoliva@redhat.com> PR c++/84973 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d6cce3e..07dad99 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -12337,6 +12337,9 @@ tsubst_default_argument (tree fn, int parmnum, tree type, tree arg, tree parmtype = TREE_TYPE (parm); if (DECL_BY_REFERENCE (parm)) parmtype = TREE_TYPE (parmtype); + if (parmtype == error_mark_node) + return error_mark_node; + gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, parmtype)); tree *slot; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 62111d4..d8ec226 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-03-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/85028 + * g++.dg/other/default13.C: New. + 2018-03-28 Jakub Jelinek <jakub@redhat.com> PR target/85095 diff --git a/gcc/testsuite/g++.dg/other/default13.C b/gcc/testsuite/g++.dg/other/default13.C new file mode 100644 index 0000000..eae23ff --- /dev/null +++ b/gcc/testsuite/g++.dg/other/default13.C @@ -0,0 +1,11 @@ +// PR c++/85028 + +struct A; + +template < typename > struct B +{ + B (int, A = A()) : f (0) {} // { dg-error "incomplete type" } + int f; +}; + +B < int > b (0); |