Author: ctopper Date: Thu Sep 22 23:48:27 2016 New Revision: 282227 URL: http://llvm.org/viewvc/llvm-project?rev=282227&view=rev Log: [X86] Split up the single switch statement in Sema::CheckX86BuiltinFunctionCall into different switches or ifs for each type of check.
This in preparation for a new check that will check some of the builtins that already had the immediate range check. Modified: cfe/trunk/lib/Sema/SemaChecking.cpp Modified: cfe/trunk/lib/Sema/SemaChecking.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=282227&r1=282226&r2=282227&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaChecking.cpp (original) +++ cfe/trunk/lib/Sema/SemaChecking.cpp Thu Sep 22 23:48:27 2016 @@ -1590,15 +1590,9 @@ static bool SemaBuiltinCpuSupports(Sema return false; } -bool Sema::CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { - int i = 0, l = 0, u = 0; +static bool isX86_64Builtin(unsigned BuiltinID) { + // These builtins only work on x86-64 targets. switch (BuiltinID) { - default: - return false; - case X86::BI__builtin_cpu_supports: - return SemaBuiltinCpuSupports(*this, TheCall); - case X86::BI__builtin_ms_va_start: - return SemaBuiltinMSVAStart(TheCall); case X86::BI__builtin_ia32_addcarryx_u64: case X86::BI__builtin_ia32_addcarry_u64: case X86::BI__builtin_ia32_subborrow_u64: @@ -1641,14 +1635,32 @@ bool Sema::CheckX86BuiltinFunctionCall(u case X86::BI__builtin_ia32_cvtsi2ss64: case X86::BI__builtin_ia32_cvtusi2sd64: case X86::BI__builtin_ia32_cvtusi2ss64: - case X86::BI__builtin_ia32_rdseed64_step: { - // These builtins only work on x86-64 targets. - const llvm::Triple &TT = Context.getTargetInfo().getTriple(); - if (TT.getArch() != llvm::Triple::x86_64) - return Diag(TheCall->getCallee()->getLocStart(), - diag::err_x86_builtin_32_bit_tgt); - return false; + case X86::BI__builtin_ia32_rdseed64_step: + return true; } + + return false; +} + +bool Sema::CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { + if (BuiltinID == X86::BI__builtin_cpu_supports) + return SemaBuiltinCpuSupports(*this, TheCall); + + if (BuiltinID == X86::BI__builtin_ms_va_start) + return SemaBuiltinMSVAStart(TheCall); + + // Check for 64-bit only builtins on a 32-bit target. + const llvm::Triple &TT = Context.getTargetInfo().getTriple(); + if (TT.getArch() != llvm::Triple::x86_64 && isX86_64Builtin(BuiltinID)) + return Diag(TheCall->getCallee()->getLocStart(), + diag::err_x86_builtin_32_bit_tgt); + + // For intrinsics which take an immediate value as part of the instruction, + // range check them here. + int i = 0, l = 0, u = 0; + switch (BuiltinID) { + default: + return false; case X86::BI__builtin_ia32_extractf64x4_mask: case X86::BI__builtin_ia32_extracti64x4_mask: case X86::BI__builtin_ia32_extractf32x8_mask: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits