summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/ASTContext.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-10-08 04:53:31 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-10-08 04:53:31 +0000
commit3f02150d316dd8d468c5750fe894da3ffcc9a8a8 (patch)
tree520a1a74813218dd1709147e41e9930fa4e36d71 /clang/lib/AST/ASTContext.cpp
parent3459ce2e5ebbabb8d4dde3809da50dc89e1b0b35 (diff)
downloadbcm5719-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.cpp13
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;
OpenPOWER on IntegriCloud