summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-01-25 04:22:16 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-01-25 04:22:16 +0000
commitcf656385ea2da9c7c29eff9c2aa7a89d81fb5703 (patch)
treed672aa132f2903b334fa317c7d22cf276e58187d /clang/test
parent44f750a3e58eb6ae84a4476aa4befc0bb406dffa (diff)
downloadbcm5719-llvm-cf656385ea2da9c7c29eff9c2aa7a89d81fb5703.tar.gz
bcm5719-llvm-cf656385ea2da9c7c29eff9c2aa7a89d81fb5703.zip
Sync 'in class initialization of static const double' extension up with GCC,
and split it out of -Wgnu into its own warning flag. * In C++11, this is now a hard error (GCC has no extension here in C++11 mode). The error can be disabled with -Wno-static-float-init, and has a fixit to add 'constexpr'. * In C++98, this is still an ExtWarn, but is now controlled by -Wstatic-float-init as well as -Wgnu. llvm-svn: 173414
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CXX/class/class.static/class.static.data/p3.cpp2
-rw-r--r--clang/test/CXX/class/class.union/p2-0x.cpp2
-rw-r--r--clang/test/SemaCXX/cxx0x-class.cpp8
-rw-r--r--clang/test/SemaCXX/warn-static-const-float.cpp20
4 files changed, 26 insertions, 6 deletions
diff --git a/clang/test/CXX/class/class.static/class.static.data/p3.cpp b/clang/test/CXX/class/class.static/class.static.data/p3.cpp
index 117997ee283..0d104e037dc 100644
--- a/clang/test/CXX/class/class.static/class.static.data/p3.cpp
+++ b/clang/test/CXX/class/class.static/class.static.data/p3.cpp
@@ -13,7 +13,7 @@ struct S {
static const int d2 = 0;
static constexpr double e = 0.0; // ok
- static const double f = 0.0; // expected-warning {{extension}} expected-note {{use 'constexpr' specifier}}
+ static const double f = 0.0; // expected-error {{requires 'constexpr' specifier}}
static char *const g = 0; // expected-error {{requires 'constexpr' specifier}}
static const NonLit h = NonLit(); // expected-error {{must be initialized out of line}}
};
diff --git a/clang/test/CXX/class/class.union/p2-0x.cpp b/clang/test/CXX/class/class.union/p2-0x.cpp
index b5c410925ce..19a3ea2e1bb 100644
--- a/clang/test/CXX/class/class.union/p2-0x.cpp
+++ b/clang/test/CXX/class/class.union/p2-0x.cpp
@@ -7,7 +7,7 @@ union U1 {
static const int k2 = k1;
static int k3 = k2; // expected-error {{non-const static data member must be initialized out of line}}
static constexpr double k4 = k2;
- static const double k5 = k4; // expected-warning {{GNU extension}} expected-note {{use 'constexpr'}}
+ static const double k5 = k4; // expected-error {{requires 'constexpr' specifier}}
int n[k1 + 3];
};
diff --git a/clang/test/SemaCXX/cxx0x-class.cpp b/clang/test/SemaCXX/cxx0x-class.cpp
index 41b0a5ce958..5532bcea3eb 100644
--- a/clang/test/SemaCXX/cxx0x-class.cpp
+++ b/clang/test/SemaCXX/cxx0x-class.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -Wno-error=static-float-init %s
int vs = 0;
@@ -17,11 +17,11 @@ public:
};
namespace rdar8367341 {
- float foo(); // expected-note {{here}}
+ float foo(); // expected-note 2{{here}}
struct A {
- static const float x = 5.0f; // expected-warning {{GNU extension}} expected-note {{use 'constexpr' specifier to silence this warning}}
- static const float y = foo(); // expected-warning {{GNU extension}} expected-note {{use 'constexpr' specifier to silence this warning}} expected-error {{in-class initializer for static data member is not a constant expression}}
+ static const float x = 5.0f; // expected-warning {{requires 'constexpr'}}
+ static const float y = foo(); // expected-warning {{requires 'constexpr'}} expected-error {{constexpr variable 'y' must be initialized by a constant expression}} expected-note {{non-constexpr function 'foo'}}
static constexpr float x2 = 5.0f;
static constexpr float y2 = foo(); // expected-error {{must be initialized by a constant expression}} expected-note {{non-constexpr function 'foo'}}
};
diff --git a/clang/test/SemaCXX/warn-static-const-float.cpp b/clang/test/SemaCXX/warn-static-const-float.cpp
new file mode 100644
index 00000000000..a669c85903f
--- /dev/null
+++ b/clang/test/SemaCXX/warn-static-const-float.cpp
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1 -verify %s -std=c++98 -DEXT
+// RUN: %clang_cc1 -verify %s -std=c++98 -Wno-gnu -DNONE
+// RUN: %clang_cc1 -verify %s -std=c++98 -Wno-static-float-init -DNONE
+// RUN: %clang_cc1 -verify %s -std=c++98 -Wno-gnu-static-float-init -DNONE
+// RUN: %clang_cc1 -verify %s -std=c++11 -DERR
+// RUN: %clang_cc1 -verify %s -std=c++11 -Wno-gnu -DERR
+// RUN: %clang_cc1 -verify %s -std=c++11 -Wno-static-float-init -DNONE
+// RUN: %clang_cc1 -verify %s -std=c++11 -Wno-gnu-static-float-init -DERR
+
+#if NONE
+// expected-no-diagnostics
+#elif ERR
+// expected-error@19 {{in-class initializer for static data member of type 'const double' requires 'constexpr' specifier}}
+#elif EXT
+// expected-warning@19 {{in-class initializer for static data member of type 'const double' is a GNU extension}}
+#endif
+
+struct X {
+ static const double x = 0.0;
+};
OpenPOWER on IntegriCloud