diff options
author | Reid Kleckner <reid@kleckner.net> | 2015-02-26 19:43:46 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2015-02-26 19:43:46 +0000 |
commit | 9fde2e013ee0892ef02f9278db4ff4de270b970a (patch) | |
tree | 5e0f672997bfd1df9be0c71c4541a4910d76e169 /clang/lib/Basic/Targets.cpp | |
parent | e81017248cc274393cdb1cfb1d9fd4cda80d55b9 (diff) | |
download | bcm5719-llvm-9fde2e013ee0892ef02f9278db4ff4de270b970a.tar.gz bcm5719-llvm-9fde2e013ee0892ef02f9278db4ff4de270b970a.zip |
Win64: Silently ignore __stdcall, __fastcall, and __thiscall
MSVC doesn't warn on this. Users are expected to apply the WINAPI macro
to functions passed by pointer to the Win32 API, and this macro expands
to __stdcall. This means we end up with a lot of useless noisy warnings
about ignored calling conventions when compiling code with clang for
Win64.
llvm-svn: 230668
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 03cd853d66e..a7c8413dd9f 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -3626,19 +3626,31 @@ public: IntPtrType = SignedLongLong; this->UserLabelPrefix = ""; } + void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override { WindowsTargetInfo<X86_64TargetInfo>::getTargetDefines(Opts, Builder); Builder.defineMacro("_WIN64"); } + BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::CharPtrBuiltinVaList; } + CallingConvCheckResult checkCallingConvention(CallingConv CC) const override { - return (CC == CC_C || - CC == CC_X86VectorCall || - CC == CC_IntelOclBicc || - CC == CC_X86_64SysV) ? CCCR_OK : CCCR_Warning; + switch (CC) { + case CC_X86StdCall: + case CC_X86ThisCall: + case CC_X86FastCall: + return CCCR_Ignore; + case CC_C: + case CC_X86VectorCall: + case CC_IntelOclBicc: + case CC_X86_64SysV: + return CCCR_OK; + default: + return CCCR_Warning; + } } }; } // end anonymous namespace |