aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
authorMike Stump <mrs@apple.com>2009-05-29 16:34:15 +0000
committerMike Stump <mrs@apple.com>2009-05-29 16:34:15 +0000
commit4f54f4e2f1af5850805033d69c5199df068d11e7 (patch)
tree52751776e123433f10bc1dc2536dc6e604fb44f5 /lib/Sema/SemaInit.cpp
parent46cd81ffe22ca376062faf4dac37cc9de42348d3 (diff)
Avoid dumping during semantic analysis when checking array types when
a vla is used. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72575 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaInit.cpp')
-rw-r--r--lib/Sema/SemaInit.cpp31
1 files changed, 16 insertions, 15 deletions
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp
index 5dc40a4593..6090b79c5c 100644
--- a/lib/Sema/SemaInit.cpp
+++ b/lib/Sema/SemaInit.cpp
@@ -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,