diff options
author | Dodji Seketeli <dodji@redhat.com> | 2011-02-18 08:47:56 +0000 |
---|---|---|
committer | Dodji Seketeli <dodji@gcc.gnu.org> | 2011-02-18 09:47:56 +0100 |
commit | 7f7d4b122b583abdbeb0681908da858ad7149d9f (patch) | |
tree | ed7a4e3154cc3931192fde65f57e04814ee2ee8b /gcc | |
parent | 5dcddcfeea9fa9fc1c85f839e0030d077d1d3110 (diff) | |
download | gcc-7f7d4b122b583abdbeb0681908da858ad7149d9f.zip gcc-7f7d4b122b583abdbeb0681908da858ad7149d9f.tar.gz gcc-7f7d4b122b583abdbeb0681908da858ad7149d9f.tar.bz2 |
re PR c++/47208 ([C++0x] ICE: in decl_constant_var_p, at cp/decl2.c:3563 with missing #include <initializer_list>)
PR c++/47208
gcc/cp/
PR c++/47208
* pt.c (do_auto_deduction): Do not mention error_mark_node in
diagnostics.
* semantics.c (finish_id_expression): Do not pass erroneous decl
to decl_constant_var_p.
gcc/testsuite/
PR c++/47208
* g++.dg/cpp0x/auto21.C: New test.
From-SVN: r170268
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/pt.c | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/auto21.C | 5 |
5 files changed, 25 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ae368a1..db9fa89 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2011-02-18 Dodji Seketeli <dodji@redhat.com> + + PR c++/47208 + * pt.c (do_auto_deduction): Do not mention error_mark_node in + diagnostics. + * semantics.c (finish_id_expression): Do not pass erroneous decl + to decl_constant_var_p. + 2011-02-17 Jakub Jelinek <jakub@redhat.com> PR c++/47783 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 02b8d15..4990636 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -18926,7 +18926,11 @@ do_auto_deduction (tree type, tree init, tree auto_node) DEDUCE_CALL, LOOKUP_NORMAL); if (val > 0) { - error ("unable to deduce %qT from %qE", type, init); + if (type && type != error_mark_node) + /* If type is error_mark_node a diagnostic must have been + emitted by now. Also, having a mention to '<type error>' + in the diagnostic is not really useful to the user. */ + error ("unable to deduce %qT from %qE", type, init); return error_mark_node; } diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index daa7280..1ad707b 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -3148,7 +3148,8 @@ finish_id_expression (tree id_expression, /* Only certain kinds of names are allowed in constant expression. Enumerators and template parameters have already been handled above. */ - if (integral_constant_expression_p + if (! error_operand_p (decl) + && integral_constant_expression_p && ! decl_constant_var_p (decl) && ! builtin_valid_in_constant_expr_p (decl)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 274da7e..2b4e1fa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-02-18 Dodji Seketeli <dodji@redhat.com> + + PR c++/47208 + * g++.dg/cpp0x/auto21.C: New test. + 2011-02-17 Iain Sandoe <iains@gcc.gnu.org> * objc.dg/special/unclaimed-category-1.h: Updated for diff --git a/gcc/testsuite/g++.dg/cpp0x/auto21.C b/gcc/testsuite/g++.dg/cpp0x/auto21.C new file mode 100644 index 0000000..1cbcac5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/auto21.C @@ -0,0 +1,5 @@ +// Origin PR c++/47208 +// { dg-options "-std=c++0x" } + +constexpr auto list = { }; // { dg-error "deducing from brace-enclosed initializer list requires #include <initializer_list>" } +static const int l = list.size(); |