diff options
| author | Matthias Braun <matze@braunis.de> | 2017-01-10 17:43:01 +0000 |
|---|---|---|
| committer | Matthias Braun <matze@braunis.de> | 2017-01-10 17:43:01 +0000 |
| commit | 44bfe03da948871100c09f132e95c21e7d7297ba (patch) | |
| tree | 3f003557e4e5428a4f8d12197699f8694395c5ed /clang/lib/CodeGen/CGDecl.cpp | |
| parent | 3daffbf6a86430277f85c05abb93c1bd3316b8db (diff) | |
| download | bcm5719-llvm-44bfe03da948871100c09f132e95c21e7d7297ba.tar.gz bcm5719-llvm-44bfe03da948871100c09f132e95c21e7d7297ba.zip | |
CGDecl: Skip static variable initializers in unreachable code
This fixes http://llvm.org/PR31054
Differential Revision: https://reviews.llvm.org/D28505
llvm-svn: 291576
Diffstat (limited to 'clang/lib/CodeGen/CGDecl.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CGDecl.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp index d7613638016..0a88b2310be 100644 --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/lib/CodeGen/CGDecl.cpp @@ -311,7 +311,7 @@ CodeGenFunction::AddInitializerToStaticVarDecl(const VarDecl &D, if (!Init) { if (!getLangOpts().CPlusPlus) CGM.ErrorUnsupported(D.getInit(), "constant l-value expression"); - else if (Builder.GetInsertBlock()) { + else if (HaveInsertPoint()) { // Since we have a static initializer, this global variable can't // be constant. GV->setConstant(false); @@ -352,7 +352,7 @@ CodeGenFunction::AddInitializerToStaticVarDecl(const VarDecl &D, GV->setConstant(CGM.isTypeConstant(D.getType(), true)); GV->setInitializer(Init); - if (hasNontrivialDestruction(D.getType())) { + if (hasNontrivialDestruction(D.getType()) && HaveInsertPoint()) { // We have a constant initializer, but a nontrivial destructor. We still // need to perform a guarded "initialization" in order to register the // destructor. |

