diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/CXX/class/class.static/class.static.data/p3.cpp | 2 | ||||
-rw-r--r-- | clang/test/CXX/class/class.union/p2-0x.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/cxx0x-class.cpp | 8 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-static-const-float.cpp | 20 |
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; +}; |