Explicitly set the string literal type from "char *" to "constant array of char".

At this point, I am fairly certain the front-end is correct. Unfortunately, the back-end is still unhappy.

That said, I've commented out the two lines in globalinit.c that are causing problems.

Chris, please have a look...thanks!

llvm-svn: 44823
This commit is contained in:
Steve Naroff 2007-12-11 00:00:01 +00:00
parent c0870605be
commit f727faf2ed
2 changed files with 6 additions and 2 deletions

View File

@ -576,6 +576,8 @@ bool Sema::CheckInitializer(Expr *&Init, QualType &DeclType, bool isStatic) {
// Return a new array type (C99 6.7.8p22).
DeclType = Context.getConstantArrayType(VAT->getElementType(), ConstVal,
ArrayType::Normal, 0);
// set type from "char *" to "constant array of char".
strLiteral->setType(DeclType);
return hadError;
}
const ConstantArrayType *CAT = DeclType->getAsConstantArrayType();
@ -586,6 +588,8 @@ bool Sema::CheckInitializer(Expr *&Init, QualType &DeclType, bool isStatic) {
diag::warn_initializer_string_for_char_array_too_long,
strLiteral->getSourceRange());
}
// set type from "char *" to "constant array of char".
strLiteral->setType(DeclType);
return hadError;
}
}

View File

@ -16,6 +16,6 @@ int latin_ptr2len (char *p);
int (*mb_ptr2len) (char *p) = latin_ptr2len;
char string[8] = "string"; // extend init
char string2[4] = "string"; // truncate init
//char string[8] = "string"; // extend init
//char string2[4] = "string"; // truncate init