summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorNuno Lopes <nunoplopes@sapo.pt>2009-01-15 16:44:45 +0000
committerNuno Lopes <nunoplopes@sapo.pt>2009-01-15 16:44:45 +0000
commit6be2939d5dbaac1167b720bab865fed18543d753 (patch)
tree9cc25d6c71dc33720419bf2176f338756b41c971 /clang/lib
parent4bdf021e055f79f0ad3a3365f5417a73682437c2 (diff)
downloadbcm5719-llvm-6be2939d5dbaac1167b720bab865fed18543d753.tar.gz
bcm5719-llvm-6be2939d5dbaac1167b720bab865fed18543d753.zip
add support for initializing static vars with a cast to union (gcc extension)
llvm-svn: 62261
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 468e95523c7..07966399da8 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2228,7 +2228,14 @@ bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) {
// Allow block exprs at top level.
if (Init->getType()->isBlockPointerType())
return false;
-
+
+ // GCC cast to union extension
+ // note: the validity of the cast expr is checked by CheckCastTypes()
+ if (CastExpr *C = dyn_cast<CastExpr>(Init)) {
+ QualType T = C->getType();
+ return T->isUnionType() && CheckForConstantInitializer(C->getSubExpr(), T);
+ }
+
InitializerElementNotConstant(Init);
return true;
}
OpenPOWER on IntegriCloud