diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-10-08 04:53:31 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-10-08 04:53:31 +0000 |
commit | 3f02150d316dd8d468c5750fe894da3ffcc9a8a8 (patch) | |
tree | 520a1a74813218dd1709147e41e9930fa4e36d71 /clang/lib/AST/ASTContext.cpp | |
parent | 3459ce2e5ebbabb8d4dde3809da50dc89e1b0b35 (diff) | |
download | bcm5719-llvm-3f02150d316dd8d468c5750fe894da3ffcc9a8a8.tar.gz bcm5719-llvm-3f02150d316dd8d468c5750fe894da3ffcc9a8a8.zip |
[MSVC Compat] Enable ABI impacting non-conforming behavior independently of -fms-compatibility
No ABI for C++ currently makes it possible to implement the standard
100% perfectly. We wrongly hid some of our compatible behavior behind
-fms-compatibility instead of tying it to the compiler ABI.
llvm-svn: 249656
Diffstat (limited to 'clang/lib/AST/ASTContext.cpp')
-rw-r--r-- | clang/lib/AST/ASTContext.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 47d0107a66d..ffa8cbbf6c5 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -5033,9 +5033,10 @@ CharUnits ASTContext::getObjCEncodingTypeSize(QualType type) const { } bool ASTContext::isMSStaticDataMemberInlineDefinition(const VarDecl *VD) const { - return getLangOpts().MSVCCompat && VD->isStaticDataMember() && - VD->getType()->isIntegralOrEnumerationType() && - VD->isFirstDecl() && !VD->isOutOfLine() && VD->hasInit(); + return getTargetInfo().getCXXABI().isMicrosoft() && + VD->isStaticDataMember() && + VD->getType()->isIntegralOrEnumerationType() && VD->isFirstDecl() && + !VD->isOutOfLine() && VD->hasInit(); } static inline @@ -8270,7 +8271,8 @@ static GVALinkage basicGVALinkageForFunction(const ASTContext &Context, if (!FD->isInlined()) return External; - if ((!Context.getLangOpts().CPlusPlus && !Context.getLangOpts().MSVCCompat && + if ((!Context.getLangOpts().CPlusPlus && + !Context.getTargetInfo().getCXXABI().isMicrosoft() && !FD->hasAttr<DLLExportAttr>()) || FD->hasAttr<GNUInlineAttr>()) { // FIXME: This doesn't match gcc's behavior for dllexport inline functions. @@ -8346,7 +8348,8 @@ static GVALinkage basicGVALinkageForVariable(const ASTContext &Context, return GVA_StrongExternal; case TSK_ExplicitSpecialization: - return Context.getLangOpts().MSVCCompat && VD->isStaticDataMember() + return Context.getTargetInfo().getCXXABI().isMicrosoft() && + VD->isStaticDataMember() ? GVA_StrongODR : GVA_StrongExternal; |