diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-06-19 11:42:00 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-06-19 11:42:00 +0000 |
commit | 955bf016ee1b01884c15de92b631b709a1015707 (patch) | |
tree | a8c50a90499edf23a9f1c5fe718b3ba4a840c4df /clang/test/SemaCXX/for-range-examples.cpp | |
parent | 562fd7534c1c82b105565e6f01429ebfdd0fa8eb (diff) | |
download | bcm5719-llvm-955bf016ee1b01884c15de92b631b709a1015707.tar.gz bcm5719-llvm-955bf016ee1b01884c15de92b631b709a1015707.zip |
[c++1z] Implement N3994: a range-based for loop can declare a variable with super-terse notation
for (x : range) { ... }
which is equivalent to
for (auto &&x : range) { ... }
llvm-svn: 211267
Diffstat (limited to 'clang/test/SemaCXX/for-range-examples.cpp')
-rw-r--r-- | clang/test/SemaCXX/for-range-examples.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/clang/test/SemaCXX/for-range-examples.cpp b/clang/test/SemaCXX/for-range-examples.cpp index b3cf9c32642..329be6362dd 100644 --- a/clang/test/SemaCXX/for-range-examples.cpp +++ b/clang/test/SemaCXX/for-range-examples.cpp @@ -176,8 +176,9 @@ namespace test4 { // Make sure these don't crash. Better diagnostics would be nice. for (: {1, 2, 3}) {} // expected-error {{expected expression}} expected-error {{expected ';'}} - for (x : {1, 2, 3}) {} // expected-error {{undeclared identifier}} expected-error {{expected ';'}} - for (y : {1, 2, 3}) {} // expected-error {{must declare a variable}} expected-warning {{result unused}} + for (1 : {1, 2, 3}) {} // expected-error {{must declare a variable}} expected-warning {{result unused}} + for (+x : {1, 2, 3}) {} // expected-error {{undeclared identifier}} expected-error {{expected ';'}} + for (+y : {1, 2, 3}) {} // expected-error {{must declare a variable}} expected-warning {{result unused}} } } @@ -209,3 +210,20 @@ namespace test6 { // expected-error@-1 {{cannot build range expression with array function parameter 'arr' since parameter with array type 'test6::vector []' is treated as pointer type 'test6::vector *'}} } } + +namespace test7 { + void f() { + int arr[5], b; + for (a : arr) {} // expected-warning {{extension}} + // FIXME: Give a -Wshadow for this by default? + for (b : arr) {} // expected-warning {{extension}} + for (arr : arr) {} // expected-warning {{extension}} + for (c alignas(8) : arr) { // expected-warning {{extension}} + static_assert(alignof(c) == 8, ""); // expected-warning {{extension}} + } + // FIXME: We should reject this, but don't, because we only check the + // attribute before we deduce the 'auto' type. + for (d alignas(1) : arr) {} // expected-warning {{extension}} + for (e [[deprecated]] : arr) { e = 0; } // expected-warning {{deprecated}} expected-note {{here}} expected-warning {{extension}} + } +} |