[clang] 5f3e5df - [clang][NFC] Convert `Sema::BuiltinCountedByRefKind` to scoped enum
Vlad Serebrennikov via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 30 22:01:10 PDT 2025
Author: Vlad Serebrennikov
Date: 2025-05-01T08:01:03+03:00
New Revision: 5f3e5df48186a7e409d548deec13a68486e3b944
URL: https://github.com/llvm/llvm-project/commit/5f3e5df48186a7e409d548deec13a68486e3b944
DIFF: https://github.com/llvm/llvm-project/commit/5f3e5df48186a7e409d548deec13a68486e3b944.diff
LOG: [clang][NFC] Convert `Sema::BuiltinCountedByRefKind` to scoped enum
Added:
Modified:
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaChecking.cpp
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaExpr.cpp
clang/lib/Sema/SemaStmt.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 5ffb9b414e9e0..11ec4d42eca8c 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -519,6 +519,15 @@ enum class VariadicCallType {
DoesNotApply
};
+enum class BuiltinCountedByRefKind {
+ Assignment,
+ Initializer,
+ FunctionArg,
+ ReturnArg,
+ ArraySubscript,
+ BinaryExpr,
+};
+
/// Sema - This implements semantic analysis and AST building for C.
/// \nosubgrouping
class Sema final : public SemaBase {
@@ -2636,15 +2645,6 @@ class Sema final : public SemaBase {
bool BuiltinNonDeterministicValue(CallExpr *TheCall);
- enum BuiltinCountedByRefKind {
- AssignmentKind,
- InitializerKind,
- FunctionArgKind,
- ReturnArgKind,
- ArraySubscriptKind,
- BinaryExprKind,
- };
-
bool CheckInvalidBuiltinCountedByRef(const Expr *E,
BuiltinCountedByRefKind K);
bool BuiltinCountedByRef(CallExpr *TheCall);
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index f1b9f5419f44e..2d648898cdea1 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -5809,27 +5809,27 @@ bool Sema::CheckInvalidBuiltinCountedByRef(const Expr *E,
return false;
switch (K) {
- case AssignmentKind:
- case InitializerKind:
+ case BuiltinCountedByRefKind::Assignment:
+ case BuiltinCountedByRefKind::Initializer:
Diag(E->getExprLoc(),
diag::err_builtin_counted_by_ref_cannot_leak_reference)
<< 0 << E->getSourceRange();
break;
- case FunctionArgKind:
+ case BuiltinCountedByRefKind::FunctionArg:
Diag(E->getExprLoc(),
diag::err_builtin_counted_by_ref_cannot_leak_reference)
<< 1 << E->getSourceRange();
break;
- case ReturnArgKind:
+ case BuiltinCountedByRefKind::ReturnArg:
Diag(E->getExprLoc(),
diag::err_builtin_counted_by_ref_cannot_leak_reference)
<< 2 << E->getSourceRange();
break;
- case ArraySubscriptKind:
+ case BuiltinCountedByRefKind::ArraySubscript:
Diag(E->getExprLoc(), diag::err_builtin_counted_by_ref_invalid_use)
<< 0 << E->getSourceRange();
break;
- case BinaryExprKind:
+ case BuiltinCountedByRefKind::BinaryExpr:
Diag(E->getExprLoc(), diag::err_builtin_counted_by_ref_invalid_use)
<< 1 << E->getSourceRange();
break;
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index dfc718eedc1d9..56396cddf57b8 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -14904,7 +14904,8 @@ void Sema::FinalizeDeclaration(Decl *ThisDecl) {
}
}
- CheckInvalidBuiltinCountedByRef(VD->getInit(), InitializerKind);
+ CheckInvalidBuiltinCountedByRef(VD->getInit(),
+ BuiltinCountedByRefKind::Initializer);
checkAttributesAfterMerging(*this, *VD);
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 9c8e7e9cabb33..b1cdf37bf5c1d 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -4963,7 +4963,8 @@ ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base,
return ExprError();
}
- CheckInvalidBuiltinCountedByRef(base, ArraySubscriptKind);
+ CheckInvalidBuiltinCountedByRef(base,
+ BuiltinCountedByRefKind::ArraySubscript);
// Handle any non-overload placeholder types in the base and index
// expressions. We can't handle overloads here because the other
@@ -6554,7 +6555,8 @@ ExprResult Sema::BuildCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc,
// The result of __builtin_counted_by_ref cannot be used as a function
// argument. It allows leaking and modification of bounds safety information.
for (const Expr *Arg : ArgExprs)
- if (CheckInvalidBuiltinCountedByRef(Arg, FunctionArgKind))
+ if (CheckInvalidBuiltinCountedByRef(Arg,
+ BuiltinCountedByRefKind::FunctionArg))
return ExprError();
if (getLangOpts().CPlusPlus) {
@@ -15430,8 +15432,9 @@ ExprResult Sema::ActOnBinOp(Scope *S, SourceLocation TokLoc,
// Emit warnings for tricky precedence issues, e.g. "bitfield & 0x4 == 0"
DiagnoseBinOpPrecedence(*this, Opc, TokLoc, LHSExpr, RHSExpr);
- BuiltinCountedByRefKind K =
- BinaryOperator::isAssignmentOp(Opc) ? AssignmentKind : BinaryExprKind;
+ BuiltinCountedByRefKind K = BinaryOperator::isAssignmentOp(Opc)
+ ? BuiltinCountedByRefKind::Assignment
+ : BuiltinCountedByRefKind::BinaryExpr;
CheckInvalidBuiltinCountedByRef(LHSExpr, K);
CheckInvalidBuiltinCountedByRef(RHSExpr, K);
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 87a400e8a6291..e2072512d7e6a 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -3858,7 +3858,8 @@ Sema::ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
<< FSI->getFirstCoroutineStmtKeyword();
}
- CheckInvalidBuiltinCountedByRef(RetVal.get(), ReturnArgKind);
+ CheckInvalidBuiltinCountedByRef(RetVal.get(),
+ BuiltinCountedByRefKind::ReturnArg);
StmtResult R =
BuildReturnStmt(ReturnLoc, RetVal.get(), /*AllowRecovery=*/true);
More information about the cfe-commits
mailing list