forked from OSchip/llvm-project
Avoid dumping during semantic analysis when checking array types when
a vla is used. llvm-svn: 72575
This commit is contained in:
parent
de83126b80
commit
fc30bf9b16
|
@ -97,21 +97,22 @@ static void CheckStringInit(Expr *Str, QualType &DeclT, Sema &S) {
|
|||
return;
|
||||
}
|
||||
|
||||
const ConstantArrayType *CAT = cast<ConstantArrayType>(AT);
|
||||
|
||||
// C99 6.7.8p14. We have an array of character type with known size. However,
|
||||
// the size may be smaller or larger than the string we are initializing.
|
||||
// FIXME: Avoid truncation for 64-bit length strings.
|
||||
if (StrLength-1 > CAT->getSize().getZExtValue())
|
||||
S.Diag(Str->getSourceRange().getBegin(),
|
||||
diag::warn_initializer_string_for_char_array_too_long)
|
||||
<< Str->getSourceRange();
|
||||
|
||||
// Set the type to the actual size that we are initializing. If we have
|
||||
// something like:
|
||||
// char x[1] = "foo";
|
||||
// then this will set the string literal's type to char[1].
|
||||
Str->setType(DeclT);
|
||||
if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(AT)) {
|
||||
// C99 6.7.8p14. We have an array of character type with known size.
|
||||
// However, the size may be smaller or larger than the string we are
|
||||
// initializing.
|
||||
// FIXME: Avoid truncation for 64-bit length strings.
|
||||
if (StrLength-1 > CAT->getSize().getZExtValue())
|
||||
S.Diag(Str->getSourceRange().getBegin(),
|
||||
diag::warn_initializer_string_for_char_array_too_long)
|
||||
<< Str->getSourceRange();
|
||||
|
||||
// Set the type to the actual size that we are initializing. If we have
|
||||
// something like:
|
||||
// char x[1] = "foo";
|
||||
// then this will set the string literal's type to char[1].
|
||||
Str->setType(DeclT);
|
||||
}
|
||||
}
|
||||
|
||||
bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType,
|
||||
|
|
|
@ -51,3 +51,6 @@ int f4(int a[*][*]);
|
|||
int pr2044(int b) {int (*c(void))[b];**c() = 2;} // expected-error {{variably modified type}}
|
||||
int pr2044b;
|
||||
int (*pr2044c(void))[pr2044b]; // expected-error {{variably modified type}}
|
||||
|
||||
const int f5_ci = 1;
|
||||
void f5() { char a[][f5_ci] = {""}; }
|
||||
|
|
Loading…
Reference in New Issue