diff options
author | Jason Merrill <jason@redhat.com> | 2011-08-23 12:03:57 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-08-23 12:03:57 -0400 |
commit | 30d1352ecc56b7a0493c2b472eb229eb00404dbe (patch) | |
tree | 408330a478bd69eca97623116a977dda90baa50a /gcc | |
parent | f7d605acaacc68d4c50af8e4ca3e1d30c3f13a80 (diff) | |
download | gcc-30d1352ecc56b7a0493c2b472eb229eb00404dbe.zip gcc-30d1352ecc56b7a0493c2b472eb229eb00404dbe.tar.gz gcc-30d1352ecc56b7a0493c2b472eb229eb00404dbe.tar.bz2 |
typeck2.c (build_functional_cast): Don't try to avoid calling build_value_init.
* typeck2.c (build_functional_cast): Don't try to avoid calling
build_value_init.
* pt.c (instantiate_class_template_1): Don't copy TYPE_HAS_* flags.
From-SVN: r177999
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 10 | ||||
-rw-r--r-- | gcc/cp/typeck2.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash7.C | 7 |
5 files changed, 15 insertions, 17 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4870f35..390a798 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2011-08-23 Jason Merrill <jason@redhat.com> + * typeck2.c (build_functional_cast): Don't try to avoid calling + build_value_init. + * pt.c (instantiate_class_template_1): Don't copy TYPE_HAS_* flags. + +2011-08-23 Jason Merrill <jason@redhat.com> + PR c++/49045 Core 1321 * tree.c (dependent_name): New. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 6b970f9..3c6b2c5 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -8503,16 +8503,6 @@ instantiate_class_template_1 (tree type) input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) = DECL_SOURCE_LOCATION (typedecl); - TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern); - TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern); - TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern); - TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern); - TYPE_HAS_COPY_ASSIGN (type) = TYPE_HAS_COPY_ASSIGN (pattern); - TYPE_HAS_CONST_COPY_ASSIGN (type) = TYPE_HAS_CONST_COPY_ASSIGN (pattern); - TYPE_HAS_COPY_CTOR (type) = TYPE_HAS_COPY_CTOR (pattern); - TYPE_HAS_CONST_COPY_CTOR (type) = TYPE_HAS_CONST_COPY_CTOR (pattern); - TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern); - TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern); TYPE_PACKED (type) = TYPE_PACKED (pattern); TYPE_ALIGN (type) = TYPE_ALIGN (pattern); TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern); diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 97f98ab..901e4ee 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -1677,10 +1677,7 @@ build_functional_cast (tree exp, tree parms, tsubst_flags_t complain) void type, creates an rvalue of the specified type, which is value-initialized. */ - if (parms == NULL_TREE - /* If there's a user-defined constructor, value-initialization is - just calling the constructor, so fall through. */ - && !TYPE_HAS_USER_CONSTRUCTOR (type)) + if (parms == NULL_TREE) { exp = build_value_init (type, complain); exp = get_target_expr_sfinae (exp, complain); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bacec37..633af2b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2011-08-23 Jason Merrill <jason@redhat.com> + * g++.dg/template/crash7.C: Adjust expected errors. + +2011-08-23 Jason Merrill <jason@redhat.com> + PR c++/49045 Core 1321 * g++.dg/cpp0x/overload2.C: New. diff --git a/gcc/testsuite/g++.dg/template/crash7.C b/gcc/testsuite/g++.dg/template/crash7.C index 88d3af8..5bd275e 100644 --- a/gcc/testsuite/g++.dg/template/crash7.C +++ b/gcc/testsuite/g++.dg/template/crash7.C @@ -5,10 +5,11 @@ // PR c++/10108: ICE in tsubst_decl for error due to non-existence // nested type. -template <typename> struct A // { dg-message "A.void.::A.const A" } +template <typename> struct A { template <typename> A(typename A::X) {} // { dg-error "no type" } }; -A<void> a; // { dg-error "required|no match" } -// { dg-prune-output "note" } +// We currently don't give the "no match" error because we don't add the +// invalid constructor template to TYPE_METHODS. +A<void> a; // { dg-message "required" } |