diff options
| author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-02-23 18:32:20 +0000 |
|---|---|---|
| committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-02-23 18:32:20 +0000 |
| commit | 29ada811deb94c8b77ad4eaf59143a6768dfcd6c (patch) | |
| tree | 2fe0f34dd752d53c0c700e5c5bc69e2b607de1c1 | |
| parent | a45d3ce3179c2a942c24e1d540651454798d338a (diff) | |
| download | ppe42-gcc-29ada811deb94c8b77ad4eaf59143a6768dfcd6c.tar.gz ppe42-gcc-29ada811deb94c8b77ad4eaf59143a6768dfcd6c.zip | |
PR c++/43143
* typeck2.c (digest_init_r): Accept value init of array.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157015 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/cp/typeck2.c | 8 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic100.C | 15 |
4 files changed, 30 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a4a5cc2498d..c72e7e3dc6b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,8 +1,12 @@ +2010-02-23 Jason Merrill <jason@redhat.com> + + PR c++/43143 + * typeck2.c (digest_init_r): Accept value init of array. + 2010-02-22 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c++/43126 * typeck.c (convert_arguments): Update error message. - 2010-02-22 Mike Stump <mikestump@comcast.net> diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 66ff3c16264..7ec4374a709 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -929,10 +929,12 @@ digest_init_r (tree type, tree init, bool nested, int flags) } if (TREE_CODE (type) == ARRAY_TYPE - && TREE_CODE (init) != CONSTRUCTOR) + && !BRACE_ENCLOSED_INITIALIZER_P (init)) { - /* Allow the result of build_array_copy. */ - if (TREE_CODE (init) == TARGET_EXPR + /* Allow the result of build_array_copy and of + build_value_init_noctor. */ + if ((TREE_CODE (init) == TARGET_EXPR + || TREE_CODE (init) == CONSTRUCTOR) && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init)))) return init; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7fe352009aa..5f9fdc03f38 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2010-02-23 Jason Merrill <jason@redhat.com> + PR c++/43143 + * g++.dg/cpp0x/variadic100.C: New. + +2010-02-23 Jason Merrill <jason@redhat.com> + PR debug/42800 * gcc.dg/debug/dwarf2/dwarf2.exp: Run c-c++-common dwarf2 tests. * g++.dg/debug/dwarf2/dwarf2.exp: Likewise. diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic100.C b/gcc/testsuite/g++.dg/cpp0x/variadic100.C new file mode 100644 index 00000000000..a364bbc9116 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic100.C @@ -0,0 +1,15 @@ +// PR c++/43143 +// { dg-options "-std=c++0x" } + +template<typename T> +T&& declval(); + +template<class T, class... Args> +void test() { + T t(declval<Args>()...); +} + +int main() { + test<const int>(); // OK + test<int[23]>(); // Error +} |

