Clang Project

clang_source_code/test/SemaCXX/c99-variable-length-array-cxx11.cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -Wvla-extension %s
2struct StillPOD {
3  StillPOD() = default;
4};
5
6struct StillPOD2 {
7  StillPOD np;
8};
9
10struct NonPOD {
11  NonPOD(int) {}
12};
13
14struct POD {
15  int x;
16  int y;
17};
18
19// We allow VLAs of POD types, only.
20void vla(int N) {
21  int array1[N]; // expected-warning{{variable length arrays are a C99 feature}}
22  POD array2[N]; // expected-warning{{variable length arrays are a C99 feature}}
23  StillPOD array3[N]; // expected-warning{{variable length arrays are a C99 feature}}
24  StillPOD2 array4[N][3]; // expected-warning{{variable length arrays are a C99 feature}}
25  NonPOD array5[N]; // expected-error{{no matching constructor for initialization of 'NonPOD [N]'}}
26  // expected-warning@-1{{variable length arrays are a C99 feature}}
27  // expected-note@-16{{candidate constructor not viable}}
28  // expected-note@-18{{candidate constructor (the implicit copy constructor) not viable}}
29  // expected-note@-19{{candidate constructor (the implicit move constructor) not viable}}
30}
31