[clang] 09fb9ad - [clang][NFC] Convert `Sema::NonTrivialCUnionContext` to scoped enum
Vlad Serebrennikov via cfe-commits
cfe-commits at lists.llvm.org
Thu May 1 21:40:01 PDT 2025
Author: Vlad Serebrennikov
Date: 2025-05-02T07:39:54+03:00
New Revision: 09fb9adbd2a432a83e451ee9156faceb9d76e9aa
URL: https://github.com/llvm/llvm-project/commit/09fb9adbd2a432a83e451ee9156faceb9d76e9aa
DIFF: https://github.com/llvm/llvm-project/commit/09fb9adbd2a432a83e451ee9156faceb9d76e9aa.diff
LOG: [clang][NFC] Convert `Sema::NonTrivialCUnionContext` to scoped enum
Added:
Modified:
clang/include/clang/Sema/Sema.h
clang/lib/Sema/Sema.cpp
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaExpr.cpp
clang/lib/Sema/SemaType.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index f3d03ea0d737a..aaff8e656b746 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -523,6 +523,29 @@ enum class BuiltinCountedByRefKind {
BinaryExpr,
};
+// Contexts where using non-trivial C union types can be disallowed. This is
+// passed to err_non_trivial_c_union_in_invalid_context.
+enum class NonTrivialCUnionContext {
+ // Function parameter.
+ FunctionParam,
+ // Function return.
+ FunctionReturn,
+ // Default-initialized object.
+ DefaultInitializedObject,
+ // Variable with automatic storage duration.
+ AutoVar,
+ // Initializer expression that might copy from another object.
+ CopyInit,
+ // Assignment.
+ Assignment,
+ // Compound literal.
+ CompoundLiteral,
+ // Block capture.
+ BlockCapture,
+ // lvalue-to-rvalue conversion of volatile type.
+ LValueToRValueVolatile,
+};
+
/// Describes the result of the name lookup and resolution performed
/// by \c Sema::ClassifyName().
enum class NameClassificationKind {
@@ -3750,29 +3773,6 @@ class Sema final : public SemaBase {
const IdentifierInfo *Name, QualType T,
TypeSourceInfo *TSInfo, StorageClass SC);
- // Contexts where using non-trivial C union types can be disallowed. This is
- // passed to err_non_trivial_c_union_in_invalid_context.
- enum NonTrivialCUnionContext {
- // Function parameter.
- NTCUC_FunctionParam,
- // Function return.
- NTCUC_FunctionReturn,
- // Default-initialized object.
- NTCUC_DefaultInitializedObject,
- // Variable with automatic storage duration.
- NTCUC_AutoVar,
- // Initializer expression that might copy from another object.
- NTCUC_CopyInit,
- // Assignment.
- NTCUC_Assignment,
- // Compound literal.
- NTCUC_CompoundLiteral,
- // Block capture.
- NTCUC_BlockCapture,
- // lvalue-to-rvalue conversion of volatile type.
- NTCUC_LValueToRValueVolatile,
- };
-
/// Emit diagnostics if the initializer or any of its explicit or
/// implicitly-generated subexpressions require copying or
/// default-initializing a type that is or contains a C union type that is
diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp
index 39e370a03afd0..b9d33d67ca7e4 100644
--- a/clang/lib/Sema/Sema.cpp
+++ b/clang/lib/Sema/Sema.cpp
@@ -2379,8 +2379,8 @@ static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) {
CapType.hasNonTrivialToPrimitiveCopyCUnion())
S.checkNonTrivialCUnion(BC.getVariable()->getType(),
BD->getCaretLocation(),
- Sema::NTCUC_BlockCapture,
- Sema::NTCUK_Destruct|Sema::NTCUK_Copy);
+ NonTrivialCUnionContext::BlockCapture,
+ Sema::NTCUK_Destruct | Sema::NTCUK_Copy);
}
}
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index a3285e8f6f5a2..85c5f4c375c3d 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -7624,7 +7624,7 @@ NamedDecl *Sema::ActOnVariableDeclarator(
if (NewVD->getType().hasNonTrivialToPrimitiveDestructCUnion() &&
NewVD->hasLocalStorage())
checkNonTrivialCUnion(NewVD->getType(), NewVD->getLocation(),
- NTCUC_AutoVar, NTCUK_Destruct);
+ NonTrivialCUnionContext::AutoVar, NTCUK_Destruct);
} else {
bool Invalid = false;
// Match up the template parameter lists with the scope specifier, then
@@ -10529,9 +10529,9 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
if (NewFD->getReturnType().hasNonTrivialToPrimitiveDestructCUnion() ||
NewFD->getReturnType().hasNonTrivialToPrimitiveCopyCUnion())
- checkNonTrivialCUnion(NewFD->getReturnType(),
- NewFD->getReturnTypeSourceRange().getBegin(),
- NTCUC_FunctionReturn, NTCUK_Destruct|NTCUK_Copy);
+ checkNonTrivialCUnion(
+ NewFD->getReturnType(), NewFD->getReturnTypeSourceRange().getBegin(),
+ NonTrivialCUnionContext::FunctionReturn, NTCUK_Destruct | NTCUK_Copy);
} else {
// C++11 [replacement.functions]p3:
// The program's definitions shall not be specified as inline.
@@ -13188,7 +13188,8 @@ void Sema::checkNonTrivialCUnionInInitializer(const Expr *Init,
if (isa<ImplicitValueInitExpr>(Init)) {
if (InitType.hasNonTrivialToPrimitiveDefaultInitializeCUnion())
- checkNonTrivialCUnion(InitType, Loc, NTCUC_DefaultInitializedObject,
+ checkNonTrivialCUnion(InitType, Loc,
+ NonTrivialCUnionContext::DefaultInitializedObject,
NTCUK_Init);
} else {
// Assume all other explicit initializers involving copying some existing
@@ -13196,7 +13197,8 @@ void Sema::checkNonTrivialCUnionInInitializer(const Expr *Init,
// TODO: ignore any explicit initializers where we can guarantee
// copy-elision.
if (InitType.hasNonTrivialToPrimitiveCopyCUnion())
- checkNonTrivialCUnion(InitType, Loc, NTCUC_CopyInit, NTCUK_Copy);
+ checkNonTrivialCUnion(InitType, Loc, NonTrivialCUnionContext::CopyInit,
+ NTCUK_Copy);
}
}
@@ -13220,7 +13222,7 @@ struct DiagNonTrivalCUnionDefaultInitializeVisitor
DiagNonTrivalCUnionDefaultInitializeVisitor(
QualType OrigTy, SourceLocation OrigLoc,
- Sema::NonTrivialCUnionContext UseContext, Sema &S)
+ NonTrivialCUnionContext UseContext, Sema &S)
: OrigTy(OrigTy), OrigLoc(OrigLoc), UseContext(UseContext), S(S) {}
void visitWithKind(QualType::PrimitiveDefaultInitializeKind PDIK, QualType QT,
@@ -13274,7 +13276,7 @@ struct DiagNonTrivalCUnionDefaultInitializeVisitor
// non-trivial C union.
QualType OrigTy;
SourceLocation OrigLoc;
- Sema::NonTrivialCUnionContext UseContext;
+ NonTrivialCUnionContext UseContext;
Sema &S;
};
@@ -13283,9 +13285,10 @@ struct DiagNonTrivalCUnionDestructedTypeVisitor
using Super =
DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void>;
- DiagNonTrivalCUnionDestructedTypeVisitor(
- QualType OrigTy, SourceLocation OrigLoc,
- Sema::NonTrivialCUnionContext UseContext, Sema &S)
+ DiagNonTrivalCUnionDestructedTypeVisitor(QualType OrigTy,
+ SourceLocation OrigLoc,
+ NonTrivialCUnionContext UseContext,
+ Sema &S)
: OrigTy(OrigTy), OrigLoc(OrigLoc), UseContext(UseContext), S(S) {}
void visitWithKind(QualType::DestructionKind DK, QualType QT,
@@ -13341,7 +13344,7 @@ struct DiagNonTrivalCUnionDestructedTypeVisitor
// non-trivial C union.
QualType OrigTy;
SourceLocation OrigLoc;
- Sema::NonTrivialCUnionContext UseContext;
+ NonTrivialCUnionContext UseContext;
Sema &S;
};
@@ -13350,8 +13353,7 @@ struct DiagNonTrivalCUnionCopyVisitor
using Super = CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void>;
DiagNonTrivalCUnionCopyVisitor(QualType OrigTy, SourceLocation OrigLoc,
- Sema::NonTrivialCUnionContext UseContext,
- Sema &S)
+ NonTrivialCUnionContext UseContext, Sema &S)
: OrigTy(OrigTy), OrigLoc(OrigLoc), UseContext(UseContext), S(S) {}
void visitWithKind(QualType::PrimitiveCopyKind PCK, QualType QT,
@@ -13415,7 +13417,7 @@ struct DiagNonTrivalCUnionCopyVisitor
// non-trivial C union.
QualType OrigTy;
SourceLocation OrigLoc;
- Sema::NonTrivialCUnionContext UseContext;
+ NonTrivialCUnionContext UseContext;
Sema &S;
};
@@ -14214,8 +14216,8 @@ void Sema::ActOnUninitializedDecl(Decl *RealDecl) {
if (!Var->isInvalidDecl() && DefKind != VarDecl::DeclarationOnly &&
Var->getType().hasNonTrivialToPrimitiveDefaultInitializeCUnion())
checkNonTrivialCUnion(Var->getType(), Var->getLocation(),
- NTCUC_DefaultInitializedObject, NTCUK_Init);
-
+ NonTrivialCUnionContext::DefaultInitializedObject,
+ NTCUK_Init);
switch (DefKind) {
case VarDecl::Definition:
@@ -15487,7 +15489,8 @@ ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
if (New->getType().hasNonTrivialToPrimitiveDestructCUnion() ||
New->getType().hasNonTrivialToPrimitiveCopyCUnion())
checkNonTrivialCUnion(New->getType(), New->getLocation(),
- NTCUC_FunctionParam, NTCUK_Destruct|NTCUK_Copy);
+ NonTrivialCUnionContext::FunctionParam,
+ NTCUK_Destruct | NTCUK_Copy);
// Parameter declarators cannot be interface types. All ObjC objects are
// passed by reference.
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 0cd86dc54b0ab..205556424c67f 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -7236,7 +7236,8 @@ Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo,
// to destruct.
if (E->getType().hasNonTrivialToPrimitiveDestructCUnion())
checkNonTrivialCUnion(E->getType(), E->getExprLoc(),
- NTCUC_CompoundLiteral, NTCUK_Destruct);
+ NonTrivialCUnionContext::CompoundLiteral,
+ NTCUK_Destruct);
// Diagnose jumps that enter or exit the lifetime of the compound literal.
if (literalType.isDestructedType()) {
@@ -15041,7 +15042,7 @@ ExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc,
if (LHS.get()->getType().hasNonTrivialToPrimitiveCopyCUnion())
checkNonTrivialCUnion(LHS.get()->getType(), LHS.get()->getExprLoc(),
- NTCUC_Assignment, NTCUK_Copy);
+ NonTrivialCUnionContext::Assignment, NTCUK_Copy);
}
RecordModifiableNonNullParam(*this, LHS.get());
break;
@@ -16531,8 +16532,9 @@ ExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc,
if (RetTy.hasNonTrivialToPrimitiveDestructCUnion() ||
RetTy.hasNonTrivialToPrimitiveCopyCUnion())
- checkNonTrivialCUnion(RetTy, BD->getCaretLocation(), NTCUC_FunctionReturn,
- NTCUK_Destruct|NTCUK_Copy);
+ checkNonTrivialCUnion(RetTy, BD->getCaretLocation(),
+ NonTrivialCUnionContext::FunctionReturn,
+ NTCUK_Destruct | NTCUK_Copy);
PopDeclContext();
@@ -19807,8 +19809,8 @@ ExprResult Sema::CheckLValueToRValueConversionOperand(Expr *E) {
(E->getType().hasNonTrivialToPrimitiveDestructCUnion() ||
E->getType().hasNonTrivialToPrimitiveCopyCUnion()))
checkNonTrivialCUnion(E->getType(), E->getExprLoc(),
- Sema::NTCUC_LValueToRValueVolatile,
- NTCUK_Destruct|NTCUK_Copy);
+ NonTrivialCUnionContext::LValueToRValueVolatile,
+ NTCUK_Destruct | NTCUK_Copy);
// C++2a [basic.def.odr]p4:
// [...] an expression of non-volatile-qualified non-class type to which
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index d103a10f17a71..6406415c371c2 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -2560,8 +2560,8 @@ bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {
if (T.hasNonTrivialToPrimitiveDestructCUnion() ||
T.hasNonTrivialToPrimitiveCopyCUnion())
- checkNonTrivialCUnion(T, Loc, NTCUC_FunctionReturn,
- NTCUK_Destruct|NTCUK_Copy);
+ checkNonTrivialCUnion(T, Loc, NonTrivialCUnionContext::FunctionReturn,
+ NTCUK_Destruct | NTCUK_Copy);
// C++2a [dcl.fct]p12:
// A volatile-qualified return type is deprecated
More information about the cfe-commits
mailing list