summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-06-10 00:55:51 +0000
committerHans Wennborg <hans@hanshq.net>2014-06-10 00:55:51 +0000
commit91ebe6eb04827a56aa975cdc899d940af0a3ad3a (patch)
tree8eb5dd46be638ecc7d61e9706e993e753edc7fb8 /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
parentb2e4edb5c83cbe3a3eb0cde751e52c786d8f9525 (diff)
downloadbcm5719-llvm-91ebe6eb04827a56aa975cdc899d940af0a3ad3a.tar.gz
bcm5719-llvm-91ebe6eb04827a56aa975cdc899d940af0a3ad3a.zip
Improve checking for dynamic initializers of dllimport fields in template instantiation
We would previously assert if the initializer was dependent. I also think that checking isConstantInitializer is more correct here than checkInitIsICE. llvm-svn: 210505
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiateDecl.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index 2fa28a33a10..bce2fd552e3 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -3671,12 +3671,6 @@ void Sema::InstantiateVariableInitializer(
// We already have an initializer in the class.
return;
- if (Var->hasAttr<DLLImportAttr>() &&
- !(OldVar->getInit() && OldVar->checkInitIsICE())) {
- // Do not dynamically initialize dllimport variables.
- return;
- }
-
if (OldVar->getInit()) {
if (Var->isStaticDataMember() && !OldVar->isOutOfLine())
PushExpressionEvaluationContext(Sema::ConstantEvaluated, OldVar);
@@ -3689,9 +3683,15 @@ void Sema::InstantiateVariableInitializer(
OldVar->getInitStyle() == VarDecl::CallInit);
if (!Init.isInvalid()) {
bool TypeMayContainAuto = true;
- if (Init.get()) {
+ Expr *InitExpr = Init.get();
+
+ if (Var->hasAttr<DLLImportAttr>() && InitExpr &&
+ !InitExpr->isConstantInitializer(getASTContext(), false)) {
+ // Do not dynamically initialize dllimport variables.
+ return;
+ } else if (InitExpr) {
bool DirectInit = OldVar->isDirectInit();
- AddInitializerToDecl(Var, Init.get(), DirectInit, TypeMayContainAuto);
+ AddInitializerToDecl(Var, InitExpr, DirectInit, TypeMayContainAuto);
} else
ActOnUninitializedDecl(Var, TypeMayContainAuto);
} else {
OpenPOWER on IntegriCloud