diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-10 20:53:43 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-10 20:53:43 +0000 |
commit | 95b83e917e40bafd7e5bf0a4cdc592745b3b1fcc (patch) | |
tree | 1986b9372b0df622f7c861e17b6ce74c887aa0db /clang/lib/Sema | |
parent | 31fd9d09b2ac07e0bae0a81d387db89d5090769d (diff) | |
download | bcm5719-llvm-95b83e917e40bafd7e5bf0a4cdc592745b3b1fcc.tar.gz bcm5719-llvm-95b83e917e40bafd7e5bf0a4cdc592745b3b1fcc.zip |
PR20256: don't accidentally instantiate non-dependent default-initialization as
value-initialization.
llvm-svn: 212764
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 5 | ||||
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index c655d3f86b8..accec95bf70 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -3679,8 +3679,9 @@ void Sema::InstantiateVariableInitializer( bool TypeMayContainAuto = true; Expr *InitExpr = Init.get(); - if (Var->hasAttr<DLLImportAttr>() && InitExpr && - !InitExpr->isConstantInitializer(getASTContext(), false)) { + if (Var->hasAttr<DLLImportAttr>() && + (!InitExpr || + !InitExpr->isConstantInitializer(getASTContext(), false))) { // Do not dynamically initialize dllimport variables. } else if (InitExpr) { bool DirectInit = OldVar->isDirectInit(); diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 5626ad59241..269a3bd8a84 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -2891,6 +2891,13 @@ ExprResult TreeTransform<Derived>::TransformInitializer(Expr *Init, // Build a ParenListExpr to represent anything else. SourceRange Parens = Construct->getParenOrBraceRange(); + if (Parens.isInvalid()) { + // This was a variable declaration's initialization for which no initializer + // was specified. + assert(NewArgs.empty() && + "no parens or braces but have direct init with arguments?"); + return ExprEmpty(); + } return getDerived().RebuildParenListExpr(Parens.getBegin(), NewArgs, Parens.getEnd()); } |