1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 %s -verify -fsyntax-only -pedantic 265383479cb2caf0f136f58fecdbdbaf9c497b7a1Chris Lattner 365383479cb2caf0f136f58fecdbdbaf9c497b7a1Chris Lattnerint test1() { 465383479cb2caf0f136f58fecdbdbaf9c497b7a1Chris Lattner typedef int x[test1()]; // vla 5d8803632d248a360a040ff03eff1162988058036Chris Lattner static int y = sizeof(x); // expected-error {{not a compile-time constant}} 665383479cb2caf0f136f58fecdbdbaf9c497b7a1Chris Lattner} 765383479cb2caf0f136f58fecdbdbaf9c497b7a1Chris Lattner 8b0c0554bd62689f48a1c42fc46c78c531cdb3cbfEli Friedman// PR2347 9b0c0554bd62689f48a1c42fc46c78c531cdb3cbfEli Friedmanvoid f (unsigned int m) 10b0c0554bd62689f48a1c42fc46c78c531cdb3cbfEli Friedman{ 116b2564c5d968657a35025239ee681f288d83be41Eli Friedman int e[2][m]; 12b0c0554bd62689f48a1c42fc46c78c531cdb3cbfEli Friedman 13b0c0554bd62689f48a1c42fc46c78c531cdb3cbfEli Friedman e[0][0] = 0; 14b0c0554bd62689f48a1c42fc46c78c531cdb3cbfEli Friedman} 15b0c0554bd62689f48a1c42fc46c78c531cdb3cbfEli Friedman 1667027a7bc35671bc3f6d5c109720060f06303391Chris Lattner// PR3048 170947b4e6c778ca94bbd0a56548de0b6b5ff1dfc9Chris Lattnerint x = sizeof(struct{char qq[x];}); // expected-error {{fields must have a constant size}} 1867027a7bc35671bc3f6d5c109720060f06303391Chris Lattner 1996e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson// PR2352 2096e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlssonvoid f2(unsigned int m) 2196e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson{ 228f30105fda579f8e6db339cb88cdec2bef6350bdDouglas Gregor extern int e1[2][m]; // expected-error {{variable length array declaration can not have 'extern' linkage}} 2396e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson 248f30105fda579f8e6db339cb88cdec2bef6350bdDouglas Gregor e1[0][0] = 0; 2596e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson 2696e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson} 2796e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson 2896e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson// PR2361 2996e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlssonint i; 30211316faa26af4ce594a10bcfc204124fe363362Chris Lattnerint c[][i]; // expected-error {{variably modified type declaration not allowed at file scope}} 31211316faa26af4ce594a10bcfc204124fe363362Chris Lattnerint d[i]; // expected-error {{variable length array declaration not allowed at file scope}} 3296e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson 33211316faa26af4ce594a10bcfc204124fe363362Chris Lattnerint (*e)[i]; // expected-error {{variably modified type declaration not allowed at file scope}} 3496e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson 3596e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlssonvoid f3() 3696e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson{ 3796e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson static int a[i]; // expected-error {{variable length array declaration can not have 'static' storage duration}} 3896e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson extern int b[i]; // expected-error {{variable length array declaration can not have 'extern' linkage}} 3996e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson 408f30105fda579f8e6db339cb88cdec2bef6350bdDouglas Gregor extern int (*c1)[i]; // expected-error {{variably modified type declaration can not have 'extern' linkage}} 4196e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson static int (*d)[i]; 4296e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson} 4396e05bc09070aaa7c18d3dd3ff13125a43532f69Anders Carlsson 44bc592e6e56f16f5d06fc70c3931f7d9d33f7b3cdEli Friedman// PR3663 45e1eed38733ed47d44f9d8c7731817c411eaf4141Chris Lattnerstatic const unsigned array[((2 * (int)((((4) / 2) + 1.0/3.0) * (4) - 1e-8)) + 1)]; // expected-warning {{variable length array folded to constant array as an extension}} 46f91f5c8a66ffd812f61819836529f8ad437f7e2bEli Friedman 47f91f5c8a66ffd812f61819836529f8ad437f7e2bEli Friedmanint a[*]; // expected-error {{star modifier used outside of function prototype}} 48f91f5c8a66ffd812f61819836529f8ad437f7e2bEli Friedmanint f4(int a[*][*]); 4988f7b576dde22ca95b4c73c4fd463e2e799873a7Eli Friedman 5088f7b576dde22ca95b4c73c4fd463e2e799873a7Eli Friedman// PR2044 5188f7b576dde22ca95b4c73c4fd463e2e799873a7Eli Friedmanint pr2044(int b) {int (*c(void))[b];**c() = 2;} // expected-error {{variably modified type}} 5288f7b576dde22ca95b4c73c4fd463e2e799873a7Eli Friedmanint pr2044b; 5388f7b576dde22ca95b4c73c4fd463e2e799873a7Eli Friedmanint (*pr2044c(void))[pr2044b]; // expected-error {{variably modified type}} 544f54f4e2f1af5850805033d69c5199df068d11e7Mike Stump 554f54f4e2f1af5850805033d69c5199df068d11e7Mike Stumpconst int f5_ci = 1; 56e1eed38733ed47d44f9d8c7731817c411eaf4141Chris Lattnervoid f5() { char a[][f5_ci] = {""}; } // expected-warning {{variable length array folded to constant array as an extension}} 57d17e340e2d516139931768697bf080f60920ba9dSam Weinig 58d17e340e2d516139931768697bf080f60920ba9dSam Weinig// PR5185 59d17e340e2d516139931768697bf080f60920ba9dSam Weinigvoid pr5185(int a[*]); 60d17e340e2d516139931768697bf080f60920ba9dSam Weinigvoid pr5185(int a[*]) // expected-error {{variable length array must be bound in function definition}} 61d17e340e2d516139931768697bf080f60920ba9dSam Weinig{ 62d17e340e2d516139931768697bf080f60920ba9dSam Weinig} 6356ff283a1f8e4e898568426f56e67a096efd1f80Eli Friedman 6456ff283a1f8e4e898568426f56e67a096efd1f80Eli Friedman// Make sure this isn't treated as an error 6556ff283a1f8e4e898568426f56e67a096efd1f80Eli Friedmanint TransformBug(int a) { 6656ff283a1f8e4e898568426f56e67a096efd1f80Eli Friedman return sizeof(*(int(*)[({ goto v; v: a;})]) 0); // expected-warning {{use of GNU statement expression extension}} 6756ff283a1f8e4e898568426f56e67a096efd1f80Eli Friedman} 68