@@ -5618,8 +5618,8 @@ ExprResult Sema::BuiltinShuffleVector(CallExpr *TheCall) {
5618
5618
if (Arg->isTypeDependent() || Arg->isValueDependent())
5619
5619
continue;
5620
5620
5621
- std::optional<llvm::APSInt> Result;
5622
- if (!( Result = Arg->getIntegerConstantExpr(Context)) )
5621
+ std::optional<llvm::APSInt> Result = Arg->getIntegerConstantExpr(Context) ;
5622
+ if (!Result)
5623
5623
return ExprError(Diag(TheCall->getBeginLoc(),
5624
5624
diag::err_shufflevector_nonconstant_argument)
5625
5625
<< Arg->getSourceRange());
@@ -5886,23 +5886,26 @@ bool Sema::BuiltinOSLogFormat(CallExpr *TheCall) {
5886
5886
return false;
5887
5887
}
5888
5888
5889
- bool Sema::BuiltinConstantArg(CallExpr *TheCall, int ArgNum,
5889
+ bool Sema::BuiltinConstantArg(CallExpr *TheCall, unsigned ArgNum,
5890
5890
llvm::APSInt &Result) {
5891
5891
Expr *Arg = TheCall->getArg(ArgNum);
5892
- DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
5893
- FunctionDecl *FDecl = cast<FunctionDecl>(DRE->getDecl());
5894
5892
5895
- if (Arg->isTypeDependent() || Arg->isValueDependent()) return false;
5893
+ if (Arg->isTypeDependent() || Arg->isValueDependent())
5894
+ return false;
5896
5895
5897
- std::optional<llvm::APSInt> R;
5898
- if (!(R = Arg->getIntegerConstantExpr(Context)))
5896
+ std::optional<llvm::APSInt> R = Arg->getIntegerConstantExpr(Context);
5897
+ if (!R) {
5898
+ auto *DRE = cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
5899
+ auto *FDecl = cast<FunctionDecl>(DRE->getDecl());
5899
5900
return Diag(TheCall->getBeginLoc(), diag::err_constant_integer_arg_type)
5900
5901
<< FDecl->getDeclName() << Arg->getSourceRange();
5902
+ }
5901
5903
Result = *R;
5904
+
5902
5905
return false;
5903
5906
}
5904
5907
5905
- bool Sema::BuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low,
5908
+ bool Sema::BuiltinConstantArgRange(CallExpr *TheCall, unsigned ArgNum, int Low,
5906
5909
int High, bool RangeIsError) {
5907
5910
if (isConstantEvaluatedContext())
5908
5911
return false;
@@ -5933,7 +5936,7 @@ bool Sema::BuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low,
5933
5936
return false;
5934
5937
}
5935
5938
5936
- bool Sema::BuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum,
5939
+ bool Sema::BuiltinConstantArgMultiple(CallExpr *TheCall, unsigned ArgNum,
5937
5940
unsigned Num) {
5938
5941
llvm::APSInt Result;
5939
5942
@@ -5953,7 +5956,7 @@ bool Sema::BuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum,
5953
5956
return false;
5954
5957
}
5955
5958
5956
- bool Sema::BuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum) {
5959
+ bool Sema::BuiltinConstantArgPower2(CallExpr *TheCall, unsigned ArgNum) {
5957
5960
llvm::APSInt Result;
5958
5961
5959
5962
// We can't check the value of a dependent argument.
@@ -5965,9 +5968,7 @@ bool Sema::BuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum) {
5965
5968
if (BuiltinConstantArg(TheCall, ArgNum, Result))
5966
5969
return true;
5967
5970
5968
- // Bit-twiddling to test for a power of 2: for x > 0, x & (x-1) is zero if
5969
- // and only if x is a power of 2.
5970
- if (Result.isStrictlyPositive() && (Result & (Result - 1)) == 0)
5971
+ if (Result.isPowerOf2())
5971
5972
return false;
5972
5973
5973
5974
return Diag(TheCall->getBeginLoc(), diag::err_argument_not_power_of_2)
@@ -5996,7 +5997,7 @@ static bool IsShiftedByte(llvm::APSInt Value) {
5996
5997
}
5997
5998
}
5998
5999
5999
- bool Sema::BuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum,
6000
+ bool Sema::BuiltinConstantArgShiftedByte(CallExpr *TheCall, unsigned ArgNum,
6000
6001
unsigned ArgBits) {
6001
6002
llvm::APSInt Result;
6002
6003
@@ -6020,7 +6021,8 @@ bool Sema::BuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum,
6020
6021
<< Arg->getSourceRange();
6021
6022
}
6022
6023
6023
- bool Sema::BuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, int ArgNum,
6024
+ bool Sema::BuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall,
6025
+ unsigned ArgNum,
6024
6026
unsigned ArgBits) {
6025
6027
llvm::APSInt Result;
6026
6028
0 commit comments