[clang][AST][NFC] Add default value to Expr::isConstantInitializer() parameter (#190313)

Almost every caller passes `false` for `ForRef`, or rather, doesn't care
what the value is. Use a default value instead.
This commit is contained in:
Timm Baeder 2026-04-05 06:54:06 +02:00 committed by GitHub
parent 257cc5ad89
commit 66483dfe34
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 16 additions and 18 deletions

View File

@ -595,11 +595,11 @@ public:
SmallVectorImpl<
PartialDiagnosticAt> &Diags);
/// isConstantInitializer - Returns true if this expression can be emitted to
/// Returns true if this expression can be emitted to
/// IR as a constant, and thus can be used as a constant initializer in C.
/// If this expression is not constant and Culprit is non-null,
/// it is used to store the address of first non constant expr.
bool isConstantInitializer(ASTContext &Ctx, bool ForRef,
bool isConstantInitializer(ASTContext &Ctx, bool ForRef = false,
const Expr **Culprit = nullptr) const;
/// If this expression is an unambiguous reference to a single declaration,

View File

@ -66,7 +66,7 @@ CIRGenFunction::emitAutoVarAlloca(const VarDecl &d,
(d.isConstexpr() ||
((ty.isPODType(getContext()) ||
getContext().getBaseElementType(ty)->isObjCObjectPointerType()) &&
d.getInit()->isConstantInitializer(getContext(), false)))) {
d.getInit()->isConstantInitializer(getContext())))) {
// If the variable's a const type, and it's neither an NRVO
// candidate nor a __block variable and has no mutable members,

View File

@ -1528,7 +1528,7 @@ CodeGenFunction::EmitAutoVarAlloca(const VarDecl &D) {
(D.isConstexpr() ||
((Ty.isPODType(getContext()) ||
getContext().getBaseElementType(Ty)->isObjCObjectPointerType()) &&
D.getInit()->isConstantInitializer(getContext(), false)))) {
D.getInit()->isConstantInitializer(getContext())))) {
// If the variable's a const type, and it's neither an NRVO
// candidate nor a __block variable and has no mutable members,

View File

@ -8315,8 +8315,7 @@ void CodeGenModule::EmitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D) {
auto *VD = cast<VarDecl>(cast<DeclRefExpr>(RefExpr)->getDecl());
bool PerformInit =
VD->getAnyInitializer() &&
!VD->getAnyInitializer()->isConstantInitializer(getContext(),
/*ForRef=*/false);
!VD->getAnyInitializer()->isConstantInitializer(getContext());
Address Addr(GetAddrOfGlobalVar(VD),
getTypes().ConvertTypeForMem(VD->getType()),

View File

@ -12890,7 +12890,7 @@ bool Sema::CheckForConstantInitializer(Expr *Init, unsigned DiagID) {
return true;
}
const Expr *Culprit;
if (Init->isConstantInitializer(Context, false, &Culprit))
if (Init->isConstantInitializer(Context, /*ForRef=*/false, &Culprit))
return false;
// Emit ObjC-specific diagnostics for non-constant literals at file scope.
@ -12900,7 +12900,7 @@ bool Sema::CheckForConstantInitializer(Expr *Init, unsigned DiagID) {
// the offender.
if (auto ALE = dyn_cast<ObjCArrayLiteral>(Init)) {
for (auto *Elm : ALE->elements()) {
if (!Elm->isConstantInitializer(Context, false, nullptr)) {
if (!Elm->isConstantInitializer(Context)) {
Diag(Elm->getExprLoc(),
diag::err_objc_literal_nonconstant_at_file_scope)
<< ObjC().CheckLiteralKind(Init) << Elm->getSourceRange();
@ -12915,14 +12915,14 @@ bool Sema::CheckForConstantInitializer(Expr *Init, unsigned DiagID) {
// Check that the key is a string literal and is constant.
if (!isa<ObjCStringLiteral>(Elm.Key) ||
!Elm.Key->isConstantInitializer(Context, false, nullptr)) {
!Elm.Key->isConstantInitializer(Context)) {
Diag(Elm.Key->getExprLoc(),
diag::err_objc_literal_nonconstant_at_file_scope)
<< ObjC().CheckLiteralKind(Init) << Elm.Key->getSourceRange();
return true;
}
if (!Elm.Value->isConstantInitializer(Context, false, nullptr)) {
if (!Elm.Value->isConstantInitializer(Context)) {
Diag(Elm.Value->getExprLoc(),
diag::err_objc_literal_nonconstant_at_file_scope)
<< ObjC().CheckLiteralKind(Init) << Elm.Value->getSourceRange();

View File

@ -7475,7 +7475,7 @@ Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo,
for (unsigned i = 0, j = ILE->getNumInits(); i != j; i++) {
Expr *Init = ILE->getInit(i);
if (!Init->isTypeDependent() && !Init->isValueDependent() &&
!Init->isConstantInitializer(Context, /*IsForRef=*/false)) {
!Init->isConstantInitializer(Context)) {
Diag(Init->getExprLoc(), diag::err_init_element_not_constant)
<< Init->getSourceBitField();
return ExprError();

View File

@ -982,7 +982,7 @@ ExprResult SemaObjC::BuildObjCArrayLiteral(SourceRange SR,
// to be in constant collections since they *could* be modified / reassigned
if (ExpressibleAsConstantInitLiteral &&
(!isa<ObjCObjectLiteral>(ElementsBuffer[I]->IgnoreImpCasts()) ||
!ElementsBuffer[I]->isConstantInitializer(Context, false)))
!ElementsBuffer[I]->isConstantInitializer(Context)))
ExpressibleAsConstantInitLiteral = false;
}
@ -1226,7 +1226,7 @@ ExprResult SemaObjC::BuildObjCDictionaryLiteral(
Element.Value = Value.get();
if (ExpressibleAsConstantInitLiteral &&
!Element.Key->isConstantInitializer(Context, false))
!Element.Key->isConstantInitializer(Context))
ExpressibleAsConstantInitLiteral = false;
// Only support string keys like plists
@ -1238,7 +1238,7 @@ ExprResult SemaObjC::BuildObjCDictionaryLiteral(
// to be in constant collections since they *could* be modified / reassigned
if (ExpressibleAsConstantInitLiteral &&
(!isa<ObjCObjectLiteral>(Element.Value->IgnoreImpCasts()) ||
!Element.Value->isConstantInitializer(Context, false)))
!Element.Value->isConstantInitializer(Context)))
ExpressibleAsConstantInitLiteral = false;
if (Element.EllipsisLoc.isInvalid())

View File

@ -8784,7 +8784,7 @@ ExprResult InitializationSequence::Perform(Sema &S,
// Check initializer is 32 bit integer constant.
// If the initializer is taken from global variable, do not diagnose since
// this has already been done when parsing the variable declaration.
if (!Init->isConstantInitializer(S.Context, false))
if (!Init->isConstantInitializer(S.Context))
break;
if (!SourceType->isIntegerType() ||

View File

@ -1474,7 +1474,7 @@ public:
if (DRE->isNonOdrUse() && (L == Linkage::Internal || L == Linkage::None))
if (auto *VD = dyn_cast<VarDecl>(Referenced);
VD && VD->getInit() && !VD->getInit()->isValueDependent() &&
VD->getInit()->isConstantInitializer(Context, /*IsForRef=*/false))
VD->getInit()->isConstantInitializer(Context))
return true;
Callback(DRE, Referenced);

View File

@ -6249,8 +6249,7 @@ void Sema::InstantiateVariableInitializer(
Expr *InitExpr = Init.get();
if (Var->hasAttr<DLLImportAttr>() &&
(!InitExpr ||
!InitExpr->isConstantInitializer(getASTContext(), false))) {
(!InitExpr || !InitExpr->isConstantInitializer(getASTContext()))) {
// Do not dynamically initialize dllimport variables.
} else if (InitExpr) {
bool DirectInit = OldVar->isDirectInit();