diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2013-11-25 09:29:18 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2013-11-25 09:29:18 +0000 |
commit | 7c3001f41a2346db040675a26a14979d3bf76c2b (patch) | |
tree | 8c4df0c4ef890e3613150784ffba4521d08c85b7 | |
parent | d1d1af106b3e735c2e29a63840ee1687f12927d2 (diff) | |
download | gcc-7c3001f41a2346db040675a26a14979d3bf76c2b.zip gcc-7c3001f41a2346db040675a26a14979d3bf76c2b.tar.gz gcc-7c3001f41a2346db040675a26a14979d3bf76c2b.tar.bz2 |
re PR c++/59080 ([c++11] ICE with array of auto)
/cp
2013-11-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/59080
* pt.c (unify): Don't call unify_array_domain with a NULL_TREE
third argument.
PR c++/59096
* pt.c (apply_late_template_attributes): Check that TREE_VALUE
isn't NULL_TREE in the attribute_takes_identifier_p case.
/testsuite
2013-11-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/59080
* g++.dg/cpp0x/initlist75.C: New.
PR c++/59096
* g++.dg/cpp0x/gen-attrs-57.C: New.
From-SVN: r205344
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/pt.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist75.C | 6 |
5 files changed, 38 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 92b520b..74b75e9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2013-11-25 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/59080 + * pt.c (unify): Don't call unify_array_domain with a NULL_TREE + third argument. + + PR c++/59096 + * pt.c (apply_late_template_attributes): Check that TREE_VALUE + isn't NULL_TREE in the attribute_takes_identifier_p case. + 2013-11-25 Adam Butcher <adam@jessamine.co.uk> PR c++/59112 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b05294b..b58c755 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -8624,7 +8624,8 @@ apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags, pass it through tsubst. Attributes like mode, format, cleanup and several target specific attributes expect it unmodified. */ - else if (attribute_takes_identifier_p (get_attribute_name (t))) + else if (attribute_takes_identifier_p (get_attribute_name (t)) + && TREE_VALUE (t)) { tree chain = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain, @@ -17210,8 +17211,9 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict, /* Also deduce from the length of the initializer list. */ tree max = size_int (CONSTRUCTOR_NELTS (arg)); tree idx = compute_array_index_type (NULL_TREE, max, tf_none); - return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm), - idx, explain_p); + if (TYPE_DOMAIN (parm) != NULL_TREE) + return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm), + idx, explain_p); } /* If the std::initializer_list<T> deduction worked, replace the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ddc0fa2..3459c51 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2013-11-25 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/59080 + * g++.dg/cpp0x/initlist75.C: New. + + PR c++/59096 + * g++.dg/cpp0x/gen-attrs-57.C: New. + 2013-11-25 Adam Butcher <adam@jessamine.co.uk> PR c++/59112 diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C new file mode 100644 index 0000000..12b4f4c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C @@ -0,0 +1,9 @@ +// PR c++/59096 +// { dg-do compile { target c++11 } } + +template<typename T> struct A +{ + typedef T B [[mode]]; // { dg-warning "ignored" } +}; + +A<int>::B b; diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist75.C b/gcc/testsuite/g++.dg/cpp0x/initlist75.C new file mode 100644 index 0000000..f185401 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist75.C @@ -0,0 +1,6 @@ +// PR c++/59080 +// { dg-require-effective-target c++11 } + +#include <initializer_list> + +auto foo[] = {}; // { dg-error "auto|unable to deduce" } |