diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-10-23 03:58:34 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-10-23 03:58:34 +0000 |
commit | 8910fe699e88f57eac891b5075659e6eb2cfdee2 (patch) | |
tree | 33f5c6a9f3e6b180bd89b87a6cdee56405bc71a8 /clang/lib/AST/ASTContext.cpp | |
parent | 64cb997ce18ad000a9ced4f49744aa385deef730 (diff) | |
download | bcm5719-llvm-8910fe699e88f57eac891b5075659e6eb2cfdee2.tar.gz bcm5719-llvm-8910fe699e88f57eac891b5075659e6eb2cfdee2.zip |
For better compatibility with C++11 and C++14, emit a nondiscardable definition
of a static constexpr data member if it's defined 'constexpr' out of line, not
only if it's defined 'constexpr' in the class.
llvm-svn: 316310
Diffstat (limited to 'clang/lib/AST/ASTContext.cpp')
-rw-r--r-- | clang/lib/AST/ASTContext.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 15aa4531b8c..a7ff9e10e9d 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -5635,14 +5635,14 @@ ASTContext::getInlineVariableDefinitionKind(const VarDecl *VD) const { // In almost all cases, it's a weak definition. auto *First = VD->getFirstDecl(); - if (!First->isConstexpr() || First->isInlineSpecified() || - !VD->isStaticDataMember()) + if (First->isInlineSpecified() || !First->isStaticDataMember()) return InlineVariableDefinitionKind::Weak; // If there's a file-context declaration in this translation unit, it's a // non-discardable definition. for (auto *D : VD->redecls()) - if (D->getLexicalDeclContext()->isFileContext()) + if (D->getLexicalDeclContext()->isFileContext() && + !D->isInlineSpecified() && (D->isConstexpr() || First->isConstexpr())) return InlineVariableDefinitionKind::Strong; // If we've not seen one yet, we don't know. |