Skip to content

Commit 4253c52

Browse files
author
Nemanja Ivanovic
committed
Add the Auxiliary target checks back in for Sema.
1 parent 8947947 commit 4253c52

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

clang/lib/Sema/SemaChecking.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2114,16 +2114,24 @@ static bool checkFPMathBuiltinElementType(Sema &S, SourceLocation Loc,
21142114
/// This checks that the target supports the builtin and that the string
21152115
/// argument is constant and valid.
21162116
static bool SemaBuiltinCpu(Sema &S, const TargetInfo &TI, CallExpr *TheCall,
2117-
unsigned BuiltinID) {
2117+
const TargetInfo *AuxTI, unsigned BuiltinID) {
21182118
assert((BuiltinID == Builtin::BI__builtin_cpu_supports ||
21192119
BuiltinID == Builtin::BI__builtin_cpu_is) &&
21202120
"Expecting __builtin_cpu_...");
21212121

21222122
bool IsCPUSupports = BuiltinID == Builtin::BI__builtin_cpu_supports;
2123-
if (IsCPUSupports && !TI.supportsCpuSupports())
2123+
const TargetInfo *TheTI = &TI;
2124+
auto SupportsBI = [=](const TargetInfo *TInfo) {
2125+
return TInfo && ((IsCPUSupports && TInfo->supportsCpuSupports()) ||
2126+
(!IsCPUSupports && TInfo->supportsCpuIs()));
2127+
};
2128+
if (!SupportsBI(&TI) && SupportsBI(AuxTI))
2129+
TheTI = AuxTI;
2130+
2131+
if (IsCPUSupports && !TheTI->supportsCpuSupports())
21242132
return S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported)
21252133
<< SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());
2126-
if (!IsCPUSupports && !TI.supportsCpuIs())
2134+
if (!IsCPUSupports && !TheTI->supportsCpuIs())
21272135
return S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported)
21282136
<< SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());
21292137

@@ -2135,10 +2143,10 @@ static bool SemaBuiltinCpu(Sema &S, const TargetInfo &TI, CallExpr *TheCall,
21352143

21362144
// Check the contents of the string.
21372145
StringRef Feature = cast<StringLiteral>(Arg)->getString();
2138-
if (IsCPUSupports && !TI.validateCpuSupports(Feature))
2146+
if (IsCPUSupports && !TheTI->validateCpuSupports(Feature))
21392147
return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_supports)
21402148
<< Arg->getSourceRange();
2141-
if (!IsCPUSupports && !TI.validateCpuIs(Feature))
2149+
if (!IsCPUSupports && !TheTI->validateCpuIs(Feature))
21422150
return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_is)
21432151
<< Arg->getSourceRange();
21442152
return false;
@@ -2173,7 +2181,8 @@ Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
21732181
switch (BuiltinID) {
21742182
case Builtin::BI__builtin_cpu_supports:
21752183
case Builtin::BI__builtin_cpu_is:
2176-
if (SemaBuiltinCpu(*this, Context.getTargetInfo(), TheCall, BuiltinID))
2184+
if (SemaBuiltinCpu(*this, Context.getTargetInfo(), TheCall,
2185+
Context.getAuxTargetInfo(), BuiltinID))
21772186
return ExprError();
21782187
break;
21792188
case Builtin::BI__builtin_cpu_init:

0 commit comments

Comments
 (0)