
552c6c2 removed support for promoting VLAs to constant arrays when the bounds isn't an ICE, since this can result in miscompiling a conforming program that assumes that the array is a VLA. Promoting VLAs for fields is still supported, since clang doesn't support VLAs in fields, so no conforming program could have a field VLA. This change is really disruptive, so this commit carves out two more cases where we promote VLAs which can't miscompile a conforming program: - When the VLA appears in an ivar -- this seems like a corollary to the field thing - When the VLA has an initializer -- VLAs can't have an initializer Differential revision: https://reviews.llvm.org/D90871
13 lines
344 B
Objective-C
13 lines
344 B
Objective-C
// RUN: %clang_cc1 -fsyntax-only %s -verify
|
|
|
|
const int ksize = 42;
|
|
int size = 42;
|
|
|
|
@interface X
|
|
{
|
|
int arr1[ksize]; // expected-warning{{variable length array folded to constant array}}
|
|
int arr2[size]; // expected-error{{instance variables must have a constant size}}
|
|
int arr3[ksize-43]; // expected-error{{array size is negative}}
|
|
}
|
|
@end
|