1//===--- ASTContext.cpp - Context to hold long-lived AST nodes ------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
--- 668 unchanged lines hidden (view full) ---
677CXXABI *ASTContext::createCXXABI(const TargetInfo &T) {
678 if (!LangOpts.CPlusPlus) return nullptr;
679
680 switch (T.getCXXABI().getKind()) {
681 case TargetCXXABI::GenericARM: // Same as Itanium at this level
682 case TargetCXXABI::iOS:
683 case TargetCXXABI::iOS64:
684 case TargetCXXABI::GenericAArch64:
685 case TargetCXXABI::GenericItanium:
686 return CreateItaniumCXXABI(*this);
687 case TargetCXXABI::Microsoft:
688 return CreateMicrosoftCXXABI(*this);
689 }
690 llvm_unreachable("Invalid CXXABI type!");
691}
692
--- 7175 unchanged lines hidden (view full) ---
7868
7869 // C99 inline semantics, where the symbol is not externally visible.
7870 return GVA_AvailableExternally;
7871 }
7872
7873 // Functions specified with extern and inline in -fms-compatibility mode
7874 // forcibly get emitted. While the body of the function cannot be later
7875 // replaced, the function definition cannot be discarded.
7876 if (FD->getMostRecentDecl()->isMSExternInline())
7877 return GVA_StrongODR;
7878
7879 return GVA_DiscardableODR;
7880}
7881
7882static GVALinkage adjustGVALinkageForDLLAttribute(GVALinkage L, const Decl *D) {
7883 // See http://msdn.microsoft.com/en-us/library/xa0d9ste.aspx
7884 // dllexport/dllimport on inline functions.
--- 174 unchanged lines hidden (view full) ---
8059 return VTContext.get();
8060}
8061
8062MangleContext *ASTContext::createMangleContext() {
8063 switch (Target->getCXXABI().getKind()) {
8064 case TargetCXXABI::GenericAArch64:
8065 case TargetCXXABI::GenericItanium:
8066 case TargetCXXABI::GenericARM:
8067 case TargetCXXABI::iOS:
8068 case TargetCXXABI::iOS64:
8069 return ItaniumMangleContext::create(*this, getDiagnostics());
8070 case TargetCXXABI::Microsoft:
8071 return MicrosoftMangleContext::create(*this, getDiagnostics());
8072 }
8073 llvm_unreachable("Unsupported ABI");
8074}
--- 292 unchanged lines hidden ---
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
--- 668 unchanged lines hidden (view full) ---
677CXXABI *ASTContext::createCXXABI(const TargetInfo &T) {
678 if (!LangOpts.CPlusPlus) return nullptr;
679
680 switch (T.getCXXABI().getKind()) {
681 case TargetCXXABI::GenericARM: // Same as Itanium at this level
682 case TargetCXXABI::iOS:
683 case TargetCXXABI::iOS64:
684 case TargetCXXABI::GenericAArch64:
685 case TargetCXXABI::GenericItanium:
686 return CreateItaniumCXXABI(*this);
687 case TargetCXXABI::Microsoft:
688 return CreateMicrosoftCXXABI(*this);
689 }
690 llvm_unreachable("Invalid CXXABI type!");
691}
692
--- 7175 unchanged lines hidden (view full) ---
7868
7869 // C99 inline semantics, where the symbol is not externally visible.
7870 return GVA_AvailableExternally;
7871 }
7872
7873 // Functions specified with extern and inline in -fms-compatibility mode
7874 // forcibly get emitted. While the body of the function cannot be later
7875 // replaced, the function definition cannot be discarded.
7876 if (FD->getMostRecentDecl()->isMSExternInline())
7877 return GVA_StrongODR;
7878
7879 return GVA_DiscardableODR;
7880}
7881
7882static GVALinkage adjustGVALinkageForDLLAttribute(GVALinkage L, const Decl *D) {
7883 // See http://msdn.microsoft.com/en-us/library/xa0d9ste.aspx
7884 // dllexport/dllimport on inline functions.
--- 174 unchanged lines hidden (view full) ---
8059 return VTContext.get();
8060}
8061
8062MangleContext *ASTContext::createMangleContext() {
8063 switch (Target->getCXXABI().getKind()) {
8064 case TargetCXXABI::GenericAArch64:
8065 case TargetCXXABI::GenericItanium:
8066 case TargetCXXABI::GenericARM:
8067 case TargetCXXABI::iOS:
8068 case TargetCXXABI::iOS64:
8069 return ItaniumMangleContext::create(*this, getDiagnostics());
8070 case TargetCXXABI::Microsoft:
8071 return MicrosoftMangleContext::create(*this, getDiagnostics());
8072 }
8073 llvm_unreachable("Unsupported ABI");
8074}
--- 292 unchanged lines hidden ---