diff options
author | Nuno Lopes <nunoplopes@sapo.pt> | 2009-01-15 16:44:45 +0000 |
---|---|---|
committer | Nuno Lopes <nunoplopes@sapo.pt> | 2009-01-15 16:44:45 +0000 |
commit | 6be2939d5dbaac1167b720bab865fed18543d753 (patch) | |
tree | 9cc25d6c71dc33720419bf2176f338756b41c971 /clang/lib | |
parent | 4bdf021e055f79f0ad3a3365f5417a73682437c2 (diff) | |
download | bcm5719-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.cpp | 9 |
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; } |