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); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits