Skip to content

Commit 09fb9ad

Browse files
committed
[clang][NFC] Convert Sema::NonTrivialCUnionContext to scoped enum
1 parent 68fd69a commit 09fb9ad

File tree

5 files changed

+56
-51
lines changed

5 files changed

+56
-51
lines changed

clang/include/clang/Sema/Sema.h

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,29 @@ enum class BuiltinCountedByRefKind {
523523
BinaryExpr,
524524
};
525525

526+
// Contexts where using non-trivial C union types can be disallowed. This is
527+
// passed to err_non_trivial_c_union_in_invalid_context.
528+
enum class NonTrivialCUnionContext {
529+
// Function parameter.
530+
FunctionParam,
531+
// Function return.
532+
FunctionReturn,
533+
// Default-initialized object.
534+
DefaultInitializedObject,
535+
// Variable with automatic storage duration.
536+
AutoVar,
537+
// Initializer expression that might copy from another object.
538+
CopyInit,
539+
// Assignment.
540+
Assignment,
541+
// Compound literal.
542+
CompoundLiteral,
543+
// Block capture.
544+
BlockCapture,
545+
// lvalue-to-rvalue conversion of volatile type.
546+
LValueToRValueVolatile,
547+
};
548+
526549
/// Describes the result of the name lookup and resolution performed
527550
/// by \c Sema::ClassifyName().
528551
enum class NameClassificationKind {
@@ -3750,29 +3773,6 @@ class Sema final : public SemaBase {
37503773
const IdentifierInfo *Name, QualType T,
37513774
TypeSourceInfo *TSInfo, StorageClass SC);
37523775

3753-
// Contexts where using non-trivial C union types can be disallowed. This is
3754-
// passed to err_non_trivial_c_union_in_invalid_context.
3755-
enum NonTrivialCUnionContext {
3756-
// Function parameter.
3757-
NTCUC_FunctionParam,
3758-
// Function return.
3759-
NTCUC_FunctionReturn,
3760-
// Default-initialized object.
3761-
NTCUC_DefaultInitializedObject,
3762-
// Variable with automatic storage duration.
3763-
NTCUC_AutoVar,
3764-
// Initializer expression that might copy from another object.
3765-
NTCUC_CopyInit,
3766-
// Assignment.
3767-
NTCUC_Assignment,
3768-
// Compound literal.
3769-
NTCUC_CompoundLiteral,
3770-
// Block capture.
3771-
NTCUC_BlockCapture,
3772-
// lvalue-to-rvalue conversion of volatile type.
3773-
NTCUC_LValueToRValueVolatile,
3774-
};
3775-
37763776
/// Emit diagnostics if the initializer or any of its explicit or
37773777
/// implicitly-generated subexpressions require copying or
37783778
/// default-initializing a type that is or contains a C union type that is

clang/lib/Sema/Sema.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2379,8 +2379,8 @@ static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) {
23792379
CapType.hasNonTrivialToPrimitiveCopyCUnion())
23802380
S.checkNonTrivialCUnion(BC.getVariable()->getType(),
23812381
BD->getCaretLocation(),
2382-
Sema::NTCUC_BlockCapture,
2383-
Sema::NTCUK_Destruct|Sema::NTCUK_Copy);
2382+
NonTrivialCUnionContext::BlockCapture,
2383+
Sema::NTCUK_Destruct | Sema::NTCUK_Copy);
23842384
}
23852385
}
23862386

clang/lib/Sema/SemaDecl.cpp

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7624,7 +7624,7 @@ NamedDecl *Sema::ActOnVariableDeclarator(
76247624
if (NewVD->getType().hasNonTrivialToPrimitiveDestructCUnion() &&
76257625
NewVD->hasLocalStorage())
76267626
checkNonTrivialCUnion(NewVD->getType(), NewVD->getLocation(),
7627-
NTCUC_AutoVar, NTCUK_Destruct);
7627+
NonTrivialCUnionContext::AutoVar, NTCUK_Destruct);
76287628
} else {
76297629
bool Invalid = false;
76307630
// Match up the template parameter lists with the scope specifier, then
@@ -10529,9 +10529,9 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
1052910529

1053010530
if (NewFD->getReturnType().hasNonTrivialToPrimitiveDestructCUnion() ||
1053110531
NewFD->getReturnType().hasNonTrivialToPrimitiveCopyCUnion())
10532-
checkNonTrivialCUnion(NewFD->getReturnType(),
10533-
NewFD->getReturnTypeSourceRange().getBegin(),
10534-
NTCUC_FunctionReturn, NTCUK_Destruct|NTCUK_Copy);
10532+
checkNonTrivialCUnion(
10533+
NewFD->getReturnType(), NewFD->getReturnTypeSourceRange().getBegin(),
10534+
NonTrivialCUnionContext::FunctionReturn, NTCUK_Destruct | NTCUK_Copy);
1053510535
} else {
1053610536
// C++11 [replacement.functions]p3:
1053710537
// The program's definitions shall not be specified as inline.
@@ -13188,15 +13188,17 @@ void Sema::checkNonTrivialCUnionInInitializer(const Expr *Init,
1318813188

1318913189
if (isa<ImplicitValueInitExpr>(Init)) {
1319013190
if (InitType.hasNonTrivialToPrimitiveDefaultInitializeCUnion())
13191-
checkNonTrivialCUnion(InitType, Loc, NTCUC_DefaultInitializedObject,
13191+
checkNonTrivialCUnion(InitType, Loc,
13192+
NonTrivialCUnionContext::DefaultInitializedObject,
1319213193
NTCUK_Init);
1319313194
} else {
1319413195
// Assume all other explicit initializers involving copying some existing
1319513196
// object.
1319613197
// TODO: ignore any explicit initializers where we can guarantee
1319713198
// copy-elision.
1319813199
if (InitType.hasNonTrivialToPrimitiveCopyCUnion())
13199-
checkNonTrivialCUnion(InitType, Loc, NTCUC_CopyInit, NTCUK_Copy);
13200+
checkNonTrivialCUnion(InitType, Loc, NonTrivialCUnionContext::CopyInit,
13201+
NTCUK_Copy);
1320013202
}
1320113203
}
1320213204

@@ -13220,7 +13222,7 @@ struct DiagNonTrivalCUnionDefaultInitializeVisitor
1322013222

1322113223
DiagNonTrivalCUnionDefaultInitializeVisitor(
1322213224
QualType OrigTy, SourceLocation OrigLoc,
13223-
Sema::NonTrivialCUnionContext UseContext, Sema &S)
13225+
NonTrivialCUnionContext UseContext, Sema &S)
1322413226
: OrigTy(OrigTy), OrigLoc(OrigLoc), UseContext(UseContext), S(S) {}
1322513227

1322613228
void visitWithKind(QualType::PrimitiveDefaultInitializeKind PDIK, QualType QT,
@@ -13274,7 +13276,7 @@ struct DiagNonTrivalCUnionDefaultInitializeVisitor
1327413276
// non-trivial C union.
1327513277
QualType OrigTy;
1327613278
SourceLocation OrigLoc;
13277-
Sema::NonTrivialCUnionContext UseContext;
13279+
NonTrivialCUnionContext UseContext;
1327813280
Sema &S;
1327913281
};
1328013282

@@ -13283,9 +13285,10 @@ struct DiagNonTrivalCUnionDestructedTypeVisitor
1328313285
using Super =
1328413286
DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void>;
1328513287

13286-
DiagNonTrivalCUnionDestructedTypeVisitor(
13287-
QualType OrigTy, SourceLocation OrigLoc,
13288-
Sema::NonTrivialCUnionContext UseContext, Sema &S)
13288+
DiagNonTrivalCUnionDestructedTypeVisitor(QualType OrigTy,
13289+
SourceLocation OrigLoc,
13290+
NonTrivialCUnionContext UseContext,
13291+
Sema &S)
1328913292
: OrigTy(OrigTy), OrigLoc(OrigLoc), UseContext(UseContext), S(S) {}
1329013293

1329113294
void visitWithKind(QualType::DestructionKind DK, QualType QT,
@@ -13341,7 +13344,7 @@ struct DiagNonTrivalCUnionDestructedTypeVisitor
1334113344
// non-trivial C union.
1334213345
QualType OrigTy;
1334313346
SourceLocation OrigLoc;
13344-
Sema::NonTrivialCUnionContext UseContext;
13347+
NonTrivialCUnionContext UseContext;
1334513348
Sema &S;
1334613349
};
1334713350

@@ -13350,8 +13353,7 @@ struct DiagNonTrivalCUnionCopyVisitor
1335013353
using Super = CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void>;
1335113354

1335213355
DiagNonTrivalCUnionCopyVisitor(QualType OrigTy, SourceLocation OrigLoc,
13353-
Sema::NonTrivialCUnionContext UseContext,
13354-
Sema &S)
13356+
NonTrivialCUnionContext UseContext, Sema &S)
1335513357
: OrigTy(OrigTy), OrigLoc(OrigLoc), UseContext(UseContext), S(S) {}
1335613358

1335713359
void visitWithKind(QualType::PrimitiveCopyKind PCK, QualType QT,
@@ -13415,7 +13417,7 @@ struct DiagNonTrivalCUnionCopyVisitor
1341513417
// non-trivial C union.
1341613418
QualType OrigTy;
1341713419
SourceLocation OrigLoc;
13418-
Sema::NonTrivialCUnionContext UseContext;
13420+
NonTrivialCUnionContext UseContext;
1341913421
Sema &S;
1342013422
};
1342113423

@@ -14214,8 +14216,8 @@ void Sema::ActOnUninitializedDecl(Decl *RealDecl) {
1421414216
if (!Var->isInvalidDecl() && DefKind != VarDecl::DeclarationOnly &&
1421514217
Var->getType().hasNonTrivialToPrimitiveDefaultInitializeCUnion())
1421614218
checkNonTrivialCUnion(Var->getType(), Var->getLocation(),
14217-
NTCUC_DefaultInitializedObject, NTCUK_Init);
14218-
14219+
NonTrivialCUnionContext::DefaultInitializedObject,
14220+
NTCUK_Init);
1421914221

1422014222
switch (DefKind) {
1422114223
case VarDecl::Definition:
@@ -15487,7 +15489,8 @@ ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
1548715489
if (New->getType().hasNonTrivialToPrimitiveDestructCUnion() ||
1548815490
New->getType().hasNonTrivialToPrimitiveCopyCUnion())
1548915491
checkNonTrivialCUnion(New->getType(), New->getLocation(),
15490-
NTCUC_FunctionParam, NTCUK_Destruct|NTCUK_Copy);
15492+
NonTrivialCUnionContext::FunctionParam,
15493+
NTCUK_Destruct | NTCUK_Copy);
1549115494

1549215495
// Parameter declarators cannot be interface types. All ObjC objects are
1549315496
// passed by reference.

clang/lib/Sema/SemaExpr.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7236,7 +7236,8 @@ Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo,
72367236
// to destruct.
72377237
if (E->getType().hasNonTrivialToPrimitiveDestructCUnion())
72387238
checkNonTrivialCUnion(E->getType(), E->getExprLoc(),
7239-
NTCUC_CompoundLiteral, NTCUK_Destruct);
7239+
NonTrivialCUnionContext::CompoundLiteral,
7240+
NTCUK_Destruct);
72407241

72417242
// Diagnose jumps that enter or exit the lifetime of the compound literal.
72427243
if (literalType.isDestructedType()) {
@@ -15041,7 +15042,7 @@ ExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc,
1504115042

1504215043
if (LHS.get()->getType().hasNonTrivialToPrimitiveCopyCUnion())
1504315044
checkNonTrivialCUnion(LHS.get()->getType(), LHS.get()->getExprLoc(),
15044-
NTCUC_Assignment, NTCUK_Copy);
15045+
NonTrivialCUnionContext::Assignment, NTCUK_Copy);
1504515046
}
1504615047
RecordModifiableNonNullParam(*this, LHS.get());
1504715048
break;
@@ -16531,8 +16532,9 @@ ExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc,
1653116532

1653216533
if (RetTy.hasNonTrivialToPrimitiveDestructCUnion() ||
1653316534
RetTy.hasNonTrivialToPrimitiveCopyCUnion())
16534-
checkNonTrivialCUnion(RetTy, BD->getCaretLocation(), NTCUC_FunctionReturn,
16535-
NTCUK_Destruct|NTCUK_Copy);
16535+
checkNonTrivialCUnion(RetTy, BD->getCaretLocation(),
16536+
NonTrivialCUnionContext::FunctionReturn,
16537+
NTCUK_Destruct | NTCUK_Copy);
1653616538

1653716539
PopDeclContext();
1653816540

@@ -19807,8 +19809,8 @@ ExprResult Sema::CheckLValueToRValueConversionOperand(Expr *E) {
1980719809
(E->getType().hasNonTrivialToPrimitiveDestructCUnion() ||
1980819810
E->getType().hasNonTrivialToPrimitiveCopyCUnion()))
1980919811
checkNonTrivialCUnion(E->getType(), E->getExprLoc(),
19810-
Sema::NTCUC_LValueToRValueVolatile,
19811-
NTCUK_Destruct|NTCUK_Copy);
19812+
NonTrivialCUnionContext::LValueToRValueVolatile,
19813+
NTCUK_Destruct | NTCUK_Copy);
1981219814

1981319815
// C++2a [basic.def.odr]p4:
1981419816
// [...] an expression of non-volatile-qualified non-class type to which

clang/lib/Sema/SemaType.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2560,8 +2560,8 @@ bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {
25602560

25612561
if (T.hasNonTrivialToPrimitiveDestructCUnion() ||
25622562
T.hasNonTrivialToPrimitiveCopyCUnion())
2563-
checkNonTrivialCUnion(T, Loc, NTCUC_FunctionReturn,
2564-
NTCUK_Destruct|NTCUK_Copy);
2563+
checkNonTrivialCUnion(T, Loc, NonTrivialCUnionContext::FunctionReturn,
2564+
NTCUK_Destruct | NTCUK_Copy);
25652565

25662566
// C++2a [dcl.fct]p12:
25672567
// A volatile-qualified return type is deprecated

0 commit comments

Comments
 (0)