From 47f9f2d1e670f700f18800a09c2a4fcd410658aa Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Sat, 23 Feb 2013 00:06:18 +0000 Subject: [PATCH] Revert r175912, "Add support for coldcc to clang" at John's request. llvm-svn: 175936 --- clang/docs/LanguageExtensions.rst | 9 --------- clang/include/clang-c/Index.h | 1 - clang/include/clang/AST/Type.h | 1 - clang/include/clang/Basic/Attr.td | 4 ---- clang/include/clang/Basic/Specifiers.h | 5 ----- clang/include/clang/Basic/TargetInfo.h | 8 +++++++- clang/lib/AST/DumpXML.cpp | 1 - clang/lib/AST/Type.cpp | 1 - clang/lib/AST/TypePrinter.cpp | 4 ---- clang/lib/Basic/Targets.cpp | 7 +++++-- clang/lib/CodeGen/CGCall.cpp | 4 ---- clang/lib/Sema/SemaDeclAttr.cpp | 10 ---------- clang/lib/Sema/SemaType.cpp | 3 --- clang/test/CodeGen/coldcc.c | 12 ------------ clang/tools/libclang/CXType.cpp | 1 - 15 files changed, 12 insertions(+), 59 deletions(-) delete mode 100644 clang/test/CodeGen/coldcc.c diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst index 40459a4..014e264 100644 --- a/clang/docs/LanguageExtensions.rst +++ b/clang/docs/LanguageExtensions.rst @@ -1970,12 +1970,3 @@ Clang implements two kinds of checks with this attribute. In this case Clang does not warn because the format string ``s`` and the corresponding arguments are annotated. If the arguments are incorrect, the caller of ``foo`` will receive a warning. - -LLVM-Specific Calling Conventions -================================= - -Clang supports `LLVM's coldcc calling convention -`_ via the ``coldcc`` -GNU-style attribute, or the ``clang::coldcc`` C++11 attribute. However, -this calling convention is not guaranteed to be ABI compatible between -different versions of the compiler. diff --git a/clang/include/clang-c/Index.h b/clang/include/clang-c/Index.h index 12a8381..c382fb1 100644 --- a/clang/include/clang-c/Index.h +++ b/clang/include/clang-c/Index.h @@ -2674,7 +2674,6 @@ enum CXCallingConv { CXCallingConv_AAPCS_VFP = 7, CXCallingConv_PnaclCall = 8, CXCallingConv_IntelOclBicc = 9, - CXCallingConv_Cold = 10, CXCallingConv_Invalid = 100, CXCallingConv_Unexposed = 200 diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 2284300..df28510 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -3323,7 +3323,6 @@ public: // No operand. attr_noreturn, attr_cdecl, - attr_coldcc, attr_fastcall, attr_stdcall, attr_thiscall, diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index c3a4494..70217d2 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -277,10 +277,6 @@ def Cold : InheritableAttr { let Spellings = [GNU<"cold">, CXX11<"gnu", "cold">]; } -def ColdCC : InheritableAttr { - let Spellings = [GNU<"coldcc">, CXX11<"clang", "coldcc">]; -} - def Common : InheritableAttr { let Spellings = [GNU<"common">, CXX11<"gnu", "common">]; } diff --git a/clang/include/clang/Basic/Specifiers.h b/clang/include/clang/Basic/Specifiers.h index 3f640b5..8706179 100644 --- a/clang/include/clang/Basic/Specifiers.h +++ b/clang/include/clang/Basic/Specifiers.h @@ -188,7 +188,6 @@ namespace clang { enum CallingConv { CC_Default, CC_C, // __attribute__((cdecl)) - CC_Cold, // __attribute__((coldcc)) CC_X86StdCall, // __attribute__((stdcall)) CC_X86FastCall, // __attribute__((fastcall)) CC_X86ThisCall, // __attribute__((thiscall)) @@ -199,10 +198,6 @@ namespace clang { CC_IntelOclBicc // __attribute__((intel_ocl_bicc)) }; - inline bool isTargetSpecific(CallingConv CC) { - return CC >= CC_X86StdCall; - } - } // end namespace clang #endif // LLVM_CLANG_BASIC_SPECIFIERS_H diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 9a8689a..deaa3ee 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -754,7 +754,13 @@ public: /// and be substituted with the default calling convention, or (someday) /// produce an error (such as using thiscall on a non-instance function). virtual CallingConvCheckResult checkCallingConvention(CallingConv CC) const { - return CCCR_Warning; + switch (CC) { + default: + return CCCR_Warning; + case CC_C: + case CC_Default: + return CCCR_OK; + } } protected: diff --git a/clang/lib/AST/DumpXML.cpp b/clang/lib/AST/DumpXML.cpp index 230f2df..be22ae4 100644 --- a/clang/lib/AST/DumpXML.cpp +++ b/clang/lib/AST/DumpXML.cpp @@ -925,7 +925,6 @@ struct XMLDumper : public XMLDeclVisitor, case CC_AAPCS_VFP: return set("cc", "aapcs_vfp"); case CC_PnaclCall: return set("cc", "pnaclcall"); case CC_IntelOclBicc: return set("cc", "intel_ocl_bicc"); - case CC_Cold: return set("cc", "coldcc"); } } diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index 0cadba2..efd588a 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -1547,7 +1547,6 @@ StringRef FunctionType::getNameForCallConv(CallingConv CC) { llvm_unreachable("no name for default cc"); case CC_C: return "cdecl"; - case CC_Cold: return "coldcc"; case CC_X86StdCall: return "stdcall"; case CC_X86FastCall: return "fastcall"; case CC_X86ThisCall: return "thiscall"; diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp index 751e298..9d1717a 100644 --- a/clang/lib/AST/TypePrinter.cpp +++ b/clang/lib/AST/TypePrinter.cpp @@ -626,9 +626,6 @@ void TypePrinter::printFunctionProtoAfter(const FunctionProtoType *T, case CC_C: OS << " __attribute__((cdecl))"; break; - case CC_Cold: - OS << " __attribute__((coldcc))"; - break; case CC_X86StdCall: OS << " __attribute__((stdcall))"; break; @@ -1159,7 +1156,6 @@ void TypePrinter::printAttributedAfter(const AttributedType *T, case AttributedType::attr_noreturn: OS << "noreturn"; break; case AttributedType::attr_cdecl: OS << "cdecl"; break; - case AttributedType::attr_coldcc: OS << "coldcc"; break; case AttributedType::attr_fastcall: OS << "fastcall"; break; case AttributedType::attr_stdcall: OS << "stdcall"; break; case AttributedType::attr_thiscall: OS << "thiscall"; break; diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index bd80409..eaf2e7d0 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -1933,7 +1933,8 @@ public: // We accept all non-ARM calling conventions return (CC == CC_X86ThisCall || CC == CC_X86FastCall || - CC == CC_X86StdCall || + CC == CC_X86StdCall || + CC == CC_C || CC == CC_X86Pascal || CC == CC_IntelOclBicc) ? CCCR_OK : CCCR_Warning; } @@ -3026,7 +3027,9 @@ public: } virtual CallingConvCheckResult checkCallingConvention(CallingConv CC) const { - return CC == CC_IntelOclBicc ? CCCR_OK : CCCR_Warning; + return (CC == CC_Default || + CC == CC_C || + CC == CC_IntelOclBicc) ? CCCR_OK : CCCR_Warning; } virtual CallingConv getDefaultCallingConv(CallingConvMethodType MT) const { diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index fe0088d..33b0475 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -37,7 +37,6 @@ using namespace CodeGen; static unsigned ClangCallConvToLLVMCallConv(CallingConv CC) { switch (CC) { default: return llvm::CallingConv::C; - case CC_Cold: return llvm::CallingConv::Cold; case CC_X86StdCall: return llvm::CallingConv::X86_StdCall; case CC_X86FastCall: return llvm::CallingConv::X86_FastCall; case CC_X86ThisCall: return llvm::CallingConv::X86_ThisCall; @@ -136,9 +135,6 @@ CodeGenTypes::arrangeFreeFunctionType(CanQual FTP) { static CallingConv getCallingConventionForDecl(const Decl *D) { // Set the appropriate calling convention for the Function. - if (D->hasAttr()) - return CC_Cold; - if (D->hasAttr()) return CC_X86StdCall; diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index d764bee..5f6f81d 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -3859,11 +3859,6 @@ static void handleCallConvAttr(Sema &S, Decl *D, const AttributeList &Attr) { } switch (Attr.getKind()) { - case AttributeList::AT_ColdCC: - D->addAttr(::new (S.Context) - ColdCCAttr(Attr.getRange(), S.Context, - Attr.getAttributeSpellingListIndex())); - return; case AttributeList::AT_FastCall: D->addAttr(::new (S.Context) FastCallAttr(Attr.getRange(), S.Context, @@ -3944,7 +3939,6 @@ bool Sema::CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC, // move to TargetAttributesSema one day. switch (attr.getKind()) { case AttributeList::AT_CDecl: CC = CC_C; break; - case AttributeList::AT_ColdCC: CC = CC_Cold; break; case AttributeList::AT_FastCall: CC = CC_X86FastCall; break; case AttributeList::AT_StdCall: CC = CC_X86StdCall; break; case AttributeList::AT_ThisCall: CC = CC_X86ThisCall; break; @@ -3977,9 +3971,6 @@ bool Sema::CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC, default: llvm_unreachable("unexpected attribute kind"); } - if (!isTargetSpecific(CC)) - return false; - const TargetInfo &TI = Context.getTargetInfo(); TargetInfo::CallingConvCheckResult A = TI.checkCallingConvention(CC); if (A == TargetInfo::CCCR_Warning) { @@ -4783,7 +4774,6 @@ static void ProcessInheritableDeclAttr(Sema &S, Scope *scope, Decl *D, break; case AttributeList::AT_StdCall: case AttributeList::AT_CDecl: - case AttributeList::AT_ColdCC: case AttributeList::AT_FastCall: case AttributeList::AT_ThisCall: case AttributeList::AT_Pascal: diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 402e522..c47a7f5 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -100,7 +100,6 @@ static void diagnoseBadTypeAttribute(Sema &S, const AttributeList &attr, #define FUNCTION_TYPE_ATTRS_CASELIST \ case AttributeList::AT_NoReturn: \ case AttributeList::AT_CDecl: \ - case AttributeList::AT_ColdCC: \ case AttributeList::AT_FastCall: \ case AttributeList::AT_StdCall: \ case AttributeList::AT_ThisCall: \ @@ -3104,8 +3103,6 @@ static AttributeList::Kind getAttrListKind(AttributedType::Kind kind) { return AttributeList::AT_NoReturn; case AttributedType::attr_cdecl: return AttributeList::AT_CDecl; - case AttributedType::attr_coldcc: - return AttributeList::AT_ColdCC; case AttributedType::attr_fastcall: return AttributeList::AT_FastCall; case AttributedType::attr_stdcall: diff --git a/clang/test/CodeGen/coldcc.c b/clang/test/CodeGen/coldcc.c deleted file mode 100644 index 8965cad..0000000 --- a/clang/test/CodeGen/coldcc.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -triple i386-unknown-unknown -Werror -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple x86_64-unknown-unknown -Werror -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple armv7-unknown-unknown -Werror -emit-llvm -o - %s | FileCheck %s - -void __attribute__((coldcc)) f1(void); - -void f2(void) { - f1(); -// CHECK: call coldcc void @f1() -} - -// CHECK: declare coldcc void @f1() diff --git a/clang/tools/libclang/CXType.cpp b/clang/tools/libclang/CXType.cpp index 90175c7..945eb11 100644 --- a/clang/tools/libclang/CXType.cpp +++ b/clang/tools/libclang/CXType.cpp @@ -500,7 +500,6 @@ CXCallingConv clang_getFunctionTypeCallingConv(CXType X) { TCALLINGCONV(AAPCS_VFP); TCALLINGCONV(PnaclCall); TCALLINGCONV(IntelOclBicc); - TCALLINGCONV(Cold); } #undef TCALLINGCONV } -- 2.7.4