aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-07-23 22:35:37 -0400
committerJason Merrill <jason@gcc.gnu.org>2016-07-23 22:35:37 -0400
commita6c690f41e0e50ce67dd3d3e791ff9f266842748 (patch)
treed657687439b97d51015cc9ac182a3043782a38a1 /gcc
parent478ed1fae766c27d0ce0fbf13d104a0011a8382e (diff)
downloadgcc-a6c690f41e0e50ce67dd3d3e791ff9f266842748.zip
gcc-a6c690f41e0e50ce67dd3d3e791ff9f266842748.tar.gz
gcc-a6c690f41e0e50ce67dd3d3e791ff9f266842748.tar.bz2
PR c++/71350 - error recursion with initializer-list
* decl.c (reshape_init_r): Check complain for missing braces warning. From-SVN: r238684
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl.c6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype66.C19
3 files changed, 28 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 34ebcb8..e1e4506 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2016-07-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/71350
+ * decl.c (reshape_init_r): Check complain for missing braces warning.
+
2016-07-22 Jason Merrill <jason@redhat.com>
PR c++/71576
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index e5e1121..08fa95d 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -5894,8 +5894,10 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
}
}
- warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
- type);
+ if (complain & tf_warning)
+ warning (OPT_Wmissing_braces,
+ "missing braces around initializer for %qT",
+ type);
}
/* Dispatch to specialized routines. */
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype66.C b/gcc/testsuite/g++.dg/cpp0x/decltype66.C
new file mode 100644
index 0000000..76ff1e2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype66.C
@@ -0,0 +1,19 @@
+// PR c++/71350
+// { dg-do compile { target c++11 } }
+
+template<typename T, unsigned int N>
+struct Array
+{
+ T data[N];
+};
+
+template<typename T>
+struct Foo
+{
+ int operator[](const Array<int, 2>& i) const { return 0; }
+ auto bar() -> decltype((*this)[{1,2}] * 0) {
+ return *this; // { dg-error "cannot convert" }
+ }
+};
+
+template struct Foo<int>;