aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2013-10-29 15:20:10 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2013-10-29 15:20:10 +0000
commit5f546e16b7ebff030c8d8f933b99378ce2a271c8 (patch)
tree5b4ea0b9c44c8b813d9b7d20214ee330daa029f2
parent72a6cdded16108660cf4fd20b9195004768a4a5a (diff)
downloadgcc-5f546e16b7ebff030c8d8f933b99378ce2a271c8.zip
gcc-5f546e16b7ebff030c8d8f933b99378ce2a271c8.tar.gz
gcc-5f546e16b7ebff030c8d8f933b99378ce2a271c8.tar.bz2
re PR c++/58888 ([c++11] Rejects-valid: static member with auto and initializer)
/cp 2013-10-29 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58888 * decl2.c (grokfield): Handle auto like NSDMI. /testsuite 2013-10-29 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58888 * g++.dg/cpp0x/auto40.C: New. * g++.dg/other/warning1.C: Adjust. From-SVN: r204164
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl2.c20
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto40.C11
-rw-r--r--gcc/testsuite/g++.dg/other/warning1.C4
5 files changed, 24 insertions, 22 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 297d015..99f14e0 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2013-10-29 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58888
+ * decl2.c (grokfield): Handle auto like NSDMI.
+
2013-10-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58878
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 5e5f5e8..2668849 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -955,26 +955,6 @@ grokfield (const cp_declarator *declarator,
/* C++11 NSDMI, keep going. */;
else if (!VAR_P (value))
gcc_unreachable ();
- else if (!processing_template_decl)
- {
- if (TREE_CODE (init) == CONSTRUCTOR)
- init = digest_init (TREE_TYPE (value), init, tf_warning_or_error);
- init = maybe_constant_init (init);
-
- if (init != error_mark_node && !TREE_CONSTANT (init))
- {
- /* We can allow references to things that are effectively
- static, since references are initialized with the
- address. */
- if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
- || (TREE_STATIC (init) == 0
- && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
- {
- error ("field initializer is not constant");
- init = error_mark_node;
- }
- }
- }
}
if (processing_template_decl && VAR_OR_FUNCTION_DECL_P (value))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7e5438f..357939e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2013-10-29 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58888
+ * g++.dg/cpp0x/auto40.C: New.
+ * g++.dg/other/warning1.C: Adjust.
+
2013-10-29 Richard Biener <rguenther@suse.de>
* gcc.dg/torture/restrict-2.c: New testcase.
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto40.C b/gcc/testsuite/g++.dg/cpp0x/auto40.C
new file mode 100644
index 0000000..287191e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto40.C
@@ -0,0 +1,11 @@
+// PR c++/58888
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct A
+{
+ static constexpr auto b{1.0};
+};
+
+constexpr decltype(A::b) A::b;
diff --git a/gcc/testsuite/g++.dg/other/warning1.C b/gcc/testsuite/g++.dg/other/warning1.C
index c65ae0f..a23d0ca 100644
--- a/gcc/testsuite/g++.dg/other/warning1.C
+++ b/gcc/testsuite/g++.dg/other/warning1.C
@@ -7,8 +7,8 @@ extern "C" int printf(const char *, ...);
struct S
{
- static const float inf = 1.0f / 0.0f; // { dg-warning "1.0|float|initializ" }
- static const float nan = 0.0f / 0.0f; // { dg-warning "0.0|float|initializ" }
+ static const float inf = 1.0f / 0.0f; // { dg-error "1.0|float|initializ" }
+ static const float nan = 0.0f / 0.0f; // { dg-error "0.0|float|initializ" }
};
int main()