aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-02-23 13:32:20 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-02-23 13:32:20 -0500
commitc6569cd04e1677007aad30c13ed934c34f9ecaac (patch)
tree2fe0f34dd752d53c0c700e5c5bc69e2b607de1c1 /gcc
parent3adcf52c820f3a0bab965fd40c4713fbc220cbaa (diff)
downloadgcc-c6569cd04e1677007aad30c13ed934c34f9ecaac.zip
gcc-c6569cd04e1677007aad30c13ed934c34f9ecaac.tar.gz
gcc-c6569cd04e1677007aad30c13ed934c34f9ecaac.tar.bz2
re PR c++/43143 ([c++0x] array value-initialization and variadics)
PR c++/43143 * typeck2.c (digest_init_r): Accept value init of array. From-SVN: r157015
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/typeck2.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic100.C15
4 files changed, 30 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a4a5cc2..c72e7e3 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 66ff3c1..7ec4374 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 7fe3520..5f9fdc0 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 0000000..a364bbc
--- /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
+}