fix PR3459: improve compatibility with gcc when checking for constant exprs

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63517 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nuno Lopes 2009-02-02 15:00:55 +00:00
Родитель 7f5221b023
Коммит f23199847b
2 изменённых файлов: 13 добавлений и 4 удалений

Просмотреть файл

@ -3128,10 +3128,9 @@ static QualType TryToFixInvalidVariablyModifiedType(QualType T,
assert(EvalResult.Val.isInt() && "Size expressions must be integers!");
llvm::APSInt &Res = EvalResult.Val.getInt();
if (Res > llvm::APSInt(Res.getBitWidth(), Res.isUnsigned()))
return Context.getConstantArrayType(VLATy->getElementType(),
Res, ArrayType::Normal, 0);
return QualType();
return Context.getConstantArrayType(VLATy->getElementType(),
Res, ArrayType::Normal, 0);
}
bool Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName,

10
test/Sema/struct-decl.c Normal file
Просмотреть файл

@ -0,0 +1,10 @@
// RUN: clang -fsyntax-only -verify %s
// PR3459
struct bar {
char n[1];
};
struct foo {
char name[(int)&((struct bar *)0)->n];
};