diff options
author | Jason Merrill <jason@redhat.com> | 2010-11-11 01:17:32 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-11-11 01:17:32 -0500 |
commit | 9c8b521559a6574dfe1dc7280eff9b41af2b0d5b (patch) | |
tree | 13ef2aa7d1ce3349e5c6648eb468da5e745869ca /gcc | |
parent | 72b53e21bd8a0d8136df0026956e47adec1f27ac (diff) | |
download | gcc-9c8b521559a6574dfe1dc7280eff9b41af2b0d5b.zip gcc-9c8b521559a6574dfe1dc7280eff9b41af2b0d5b.tar.gz gcc-9c8b521559a6574dfe1dc7280eff9b41af2b0d5b.tar.bz2 |
re PR c++/46420 ([C++0X][4.6 regression] ICE: in tsubst_copy, at cp/pt.c:11677)
PR c++/46420
* pt.c (tsubst_copy_and_build) [TARGET_EXPR]: New case.
[CONSTRUCTOR]: Use the tsubsted type.
From-SVN: r166592
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C | 13 |
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f85f4b1..75c0c53 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2010-11-10 Jason Merrill <jason@redhat.com> + PR c++/46420 + * pt.c (tsubst_copy_and_build) [TARGET_EXPR]: New case. + [CONSTRUCTOR]: Use the tsubsted type. + PR c++/46369 * semantics.c (cxx_eval_bit_field_ref): New. (cxx_eval_constant_expression): Call it. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 7a06038..56b7543 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -13197,6 +13197,7 @@ tsubst_copy_and_build (tree t, if (TREE_HAS_CONSTRUCTOR (t)) return finish_compound_literal (type, r); + TREE_TYPE (r) = type; return r; } @@ -13316,6 +13317,12 @@ tsubst_copy_and_build (tree t, return build_lambda_object (r); } + case TARGET_EXPR: + /* We can get here for a constant initializer of non-dependent type. + FIXME stop folding in cp_parser_initializer_clause. */ + gcc_assert (TREE_CONSTANT (t)); + return get_target_expr (RECUR (TARGET_EXPR_INITIAL (t))); + default: /* Handle Objective-C++ constructs, if appropriate. */ { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1115512..467290d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-11-10 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/constexpr-46420.C: New. + 2010-11-10 Joseph Myers <joseph@codesourcery.com> * g++.dg/ext/bitfield2.C, g++.dg/ext/bitfield4.C, diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C new file mode 100644 index 0000000..757a6e3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C @@ -0,0 +1,13 @@ +// PR c++/46420 +// { dg-options -std=c++0x } + +template<typename> class vector { }; +struct A{}; +template <class T1> +void complete_test(vector<T1> data1){ + A drop=A(); +} +int main(){ + vector<double> vect1; + complete_test(vect1); +} |