diff options
author | Serge Pavlov <sepavloff@gmail.com> | 2014-02-06 03:49:11 +0000 |
---|---|---|
committer | Serge Pavlov <sepavloff@gmail.com> | 2014-02-06 03:49:11 +0000 |
commit | 774c6d03b2b0a0bf20c017756c988e7ad5747953 (patch) | |
tree | 7da5aafc845c9473e92a447c6780d53a10692764 /clang/test/SemaCXX/c99-variable-length-array.cpp | |
parent | d461244972ebab3bdfaaadbea212ed755c97adf1 (diff) | |
download | bcm5719-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.cpp | 21 |
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>(); + } +} |