forked from OSchip/llvm-project
Fix assert instantiating string init of static variable
... when the variable's type is a typedef of a ConstantArrayType. Just look through the typedef (and any other sugar). We only use the constant array type here to get the element count. llvm-svn: 227115
This commit is contained in:
parent
611dfed99f
commit
577b39349e
|
@ -149,9 +149,9 @@ static void updateStringLiteralType(Expr *E, QualType Ty) {
|
|||
static void CheckStringInit(Expr *Str, QualType &DeclT, const ArrayType *AT,
|
||||
Sema &S) {
|
||||
// Get the length of the string as parsed.
|
||||
uint64_t StrLength =
|
||||
cast<ConstantArrayType>(Str->getType())->getSize().getZExtValue();
|
||||
|
||||
auto *ConstantArrayTy =
|
||||
cast<ConstantArrayType>(Str->getType()->getUnqualifiedDesugaredType());
|
||||
uint64_t StrLength = ConstantArrayTy->getSize().getZExtValue();
|
||||
|
||||
if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(AT)) {
|
||||
// C99 6.7.8p14. We have an array of character type with unknown size
|
||||
|
|
|
@ -114,3 +114,15 @@ namespace PR6449 {
|
|||
template class X1<char>;
|
||||
|
||||
}
|
||||
|
||||
typedef char MyString[100];
|
||||
template <typename T>
|
||||
struct StaticVarWithTypedefString {
|
||||
static MyString str;
|
||||
};
|
||||
template <typename T>
|
||||
MyString StaticVarWithTypedefString<T>::str = "";
|
||||
|
||||
void testStaticVarWithTypedefString() {
|
||||
(void)StaticVarWithTypedefString<int>::str;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue