diff options
Diffstat (limited to 'clang/test/SemaCXX/uninitialized.cpp')
-rw-r--r-- | clang/test/SemaCXX/uninitialized.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/uninitialized.cpp b/clang/test/SemaCXX/uninitialized.cpp index ac08183a70c..018b1feba96 100644 --- a/clang/test/SemaCXX/uninitialized.cpp +++ b/clang/test/SemaCXX/uninitialized.cpp @@ -1341,3 +1341,47 @@ struct D : public C, public A { }; } + +namespace value { +template <class T> T move(T t); +template <class T> T notmove(T t); +} +namespace lvalueref { +template <class T> T move(T& t); +template <class T> T notmove(T& t); +} +namespace rvalueref { +template <class T> T move(T&& t); +template <class T> T notmove(T&& t); +} + +namespace move_test { +int a1 = std::move(a1); // expected-warning {{uninitialized}} +int a2 = value::move(a2); // expected-warning {{uninitialized}} +int a3 = value::notmove(a3); // expected-warning {{uninitialized}} +int a4 = lvalueref::move(a4); +int a5 = lvalueref::notmove(a5); +int a6 = rvalueref::move(a6); +int a7 = rvalueref::notmove(a7); + +void test() { + int a1 = std::move(a1); // expected-warning {{uninitialized}} + int a2 = value::move(a2); // expected-warning {{uninitialized}} + int a3 = value::notmove(a3); // expected-warning {{uninitialized}} + int a4 = lvalueref::move(a4); + int a5 = lvalueref::notmove(a5); + int a6 = rvalueref::move(a6); + int a7 = rvalueref::notmove(a7); +} + +class A { + int a; + A(int (*) [1]) : a(std::move(a)) {} // expected-warning {{uninitialized}} + A(int (*) [2]) : a(value::move(a)) {} // expected-warning {{uninitialized}} + A(int (*) [3]) : a(value::notmove(a)) {} // expected-warning {{uninitialized}} + A(int (*) [4]) : a(lvalueref::move(a)) {} + A(int (*) [5]) : a(lvalueref::notmove(a)) {} + A(int (*) [6]) : a(rvalueref::move(a)) {} + A(int (*) [7]) : a(rvalueref::notmove(a)) {} +}; +} |