summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/c99-variable-length-array.cpp
diff options
context:
space:
mode:
authorSerge Pavlov <sepavloff@gmail.com>2014-02-06 03:49:11 +0000
committerSerge Pavlov <sepavloff@gmail.com>2014-02-06 03:49:11 +0000
commit774c6d03b2b0a0bf20c017756c988e7ad5747953 (patch)
tree7da5aafc845c9473e92a447c6780d53a10692764 /clang/test/SemaCXX/c99-variable-length-array.cpp
parentd461244972ebab3bdfaaadbea212ed755c97adf1 (diff)
downloadbcm5719-llvm-774c6d03b2b0a0bf20c017756c988e7ad5747953.tar.gz
bcm5719-llvm-774c6d03b2b0a0bf20c017756c988e7ad5747953.zip
Allow transformation of VariableArray to ConstantArray.
In the following code: struct A { static const int sz; }; template<class T> void f() { T arr[A::sz]; } the array 'arr' is represented as a variable size array in the template. If 'A::sz' gets value below in the translation unit, the array in instantiation can turn into constant size array. This change fixes PR18633. Differential Revision: http://llvm-reviews.chandlerc.com/D2688 llvm-svn: 200899
Diffstat (limited to 'clang/test/SemaCXX/c99-variable-length-array.cpp')
-rw-r--r--clang/test/SemaCXX/c99-variable-length-array.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/c99-variable-length-array.cpp b/clang/test/SemaCXX/c99-variable-length-array.cpp
index bb620c71fa0..237f56458da 100644
--- a/clang/test/SemaCXX/c99-variable-length-array.cpp
+++ b/clang/test/SemaCXX/c99-variable-length-array.cpp
@@ -140,3 +140,24 @@ namespace PR11744 {
}
int test = f<int>(0); // expected-note {{instantiation of}}
}
+
+namespace pr18633 {
+ struct A1 {
+ static const int sz;
+ static const int sz2;
+ };
+ const int A1::sz2 = 11;
+ template<typename T>
+ void func () {
+ int arr[A1::sz]; // expected-warning{{variable length arrays are a C99 feature}}
+ }
+ template<typename T>
+ void func2 () {
+ int arr[A1::sz2];
+ }
+ const int A1::sz = 12;
+ void func2() {
+ func<int>();
+ func2<int>();
+ }
+}
OpenPOWER on IntegriCloud