@@ -2974,10 +2974,6 @@ class TypeTraitExpr final
2974
2974
// / __array_extent(int[10][20], 1) == 20
2975
2975
// / \endcode
2976
2976
class ArrayTypeTraitExpr : public Expr {
2977
- // / The trait. An ArrayTypeTrait enum in MSVC compat unsigned.
2978
- LLVM_PREFERRED_TYPE (ArrayTypeTrait)
2979
- unsigned ATT : 2 ;
2980
-
2981
2977
// / The value of the type trait. Unspecified if dependent.
2982
2978
uint64_t Value = 0 ;
2983
2979
@@ -2999,21 +2995,27 @@ class ArrayTypeTraitExpr : public Expr {
2999
2995
ArrayTypeTraitExpr (SourceLocation loc, ArrayTypeTrait att,
3000
2996
TypeSourceInfo *queried, uint64_t value, Expr *dimension,
3001
2997
SourceLocation rparen, QualType ty)
3002
- : Expr(ArrayTypeTraitExprClass, ty, VK_PRValue, OK_Ordinary), ATT(att),
2998
+ : Expr(ArrayTypeTraitExprClass, ty, VK_PRValue, OK_Ordinary),
3003
2999
Value (value), Dimension(dimension), Loc(loc), RParen(rparen),
3004
3000
QueriedType(queried) {
3005
3001
assert (att <= ATT_Last && " invalid enum value!" );
3006
- assert (static_cast <unsigned >(att) == ATT && " ATT overflow!" );
3002
+ ArrayTypeTraitExprBits.ATT = att;
3003
+ assert (static_cast <unsigned >(att) == ArrayTypeTraitExprBits.ATT &&
3004
+ " ATT overflow!" );
3007
3005
setDependence (computeDependence (this ));
3008
3006
}
3009
3007
3010
3008
explicit ArrayTypeTraitExpr (EmptyShell Empty)
3011
- : Expr(ArrayTypeTraitExprClass, Empty), ATT(0 ) {}
3009
+ : Expr(ArrayTypeTraitExprClass, Empty) {
3010
+ ArrayTypeTraitExprBits.ATT = 0 ;
3011
+ }
3012
3012
3013
3013
SourceLocation getBeginLoc () const LLVM_READONLY { return Loc; }
3014
3014
SourceLocation getEndLoc () const LLVM_READONLY { return RParen; }
3015
3015
3016
- ArrayTypeTrait getTrait () const { return static_cast <ArrayTypeTrait>(ATT); }
3016
+ ArrayTypeTrait getTrait () const {
3017
+ return static_cast <ArrayTypeTrait>(ArrayTypeTraitExprBits.ATT );
3018
+ }
3017
3019
3018
3020
QualType getQueriedType () const { return QueriedType->getType (); }
3019
3021
@@ -3045,14 +3047,6 @@ class ArrayTypeTraitExpr : public Expr {
3045
3047
// / __is_lvalue_expr(1) == false
3046
3048
// / \endcode
3047
3049
class ExpressionTraitExpr : public Expr {
3048
- // / The trait. A ExpressionTrait enum in MSVC compatible unsigned.
3049
- LLVM_PREFERRED_TYPE (ExpressionTrait)
3050
- unsigned ET : 31 ;
3051
-
3052
- // / The value of the type trait. Unspecified if dependent.
3053
- LLVM_PREFERRED_TYPE (bool )
3054
- unsigned Value : 1 ;
3055
-
3056
3050
// / The location of the type trait keyword.
3057
3051
SourceLocation Loc;
3058
3052
@@ -3068,24 +3062,32 @@ class ExpressionTraitExpr : public Expr {
3068
3062
ExpressionTraitExpr (SourceLocation loc, ExpressionTrait et, Expr *queried,
3069
3063
bool value, SourceLocation rparen, QualType resultType)
3070
3064
: Expr(ExpressionTraitExprClass, resultType, VK_PRValue, OK_Ordinary),
3071
- ET (et), Value(value), Loc(loc), RParen(rparen),
3072
- QueriedExpression(queried) {
3065
+ Loc (loc), RParen(rparen), QueriedExpression(queried) {
3066
+ ExpressionTraitExprBits.ET = et;
3067
+ ExpressionTraitExprBits.Value = value;
3068
+
3073
3069
assert (et <= ET_Last && " invalid enum value!" );
3074
- assert (static_cast <unsigned >(et) == ET && " ET overflow!" );
3070
+ assert (static_cast <unsigned >(et) == ExpressionTraitExprBits.ET &&
3071
+ " ET overflow!" );
3075
3072
setDependence (computeDependence (this ));
3076
3073
}
3077
3074
3078
3075
explicit ExpressionTraitExpr (EmptyShell Empty)
3079
- : Expr(ExpressionTraitExprClass, Empty), ET(0 ), Value(false ) {}
3076
+ : Expr(ExpressionTraitExprClass, Empty) {
3077
+ ExpressionTraitExprBits.ET = 0 ;
3078
+ ExpressionTraitExprBits.Value = false ;
3079
+ }
3080
3080
3081
3081
SourceLocation getBeginLoc () const LLVM_READONLY { return Loc; }
3082
3082
SourceLocation getEndLoc () const LLVM_READONLY { return RParen; }
3083
3083
3084
- ExpressionTrait getTrait () const { return static_cast <ExpressionTrait>(ET); }
3084
+ ExpressionTrait getTrait () const {
3085
+ return static_cast <ExpressionTrait>(ExpressionTraitExprBits.ET );
3086
+ }
3085
3087
3086
3088
Expr *getQueriedExpression () const { return QueriedExpression; }
3087
3089
3088
- bool getValue () const { return Value; }
3090
+ bool getValue () const { return ExpressionTraitExprBits. Value ; }
3089
3091
3090
3092
static bool classof (const Stmt *T) {
3091
3093
return T->getStmtClass () == ExpressionTraitExprClass;
@@ -4506,22 +4508,15 @@ class PackIndexingExpr final
4506
4508
// The pack being indexed, followed by the index
4507
4509
Stmt *SubExprs[2 ];
4508
4510
4509
- // The size of the trailing expressions.
4510
- unsigned TransformedExpressions : 31 ;
4511
-
4512
- LLVM_PREFERRED_TYPE (bool )
4513
- unsigned FullySubstituted : 1 ;
4514
-
4515
4511
PackIndexingExpr (QualType Type, SourceLocation EllipsisLoc,
4516
4512
SourceLocation RSquareLoc, Expr *PackIdExpr, Expr *IndexExpr,
4517
4513
ArrayRef<Expr *> SubstitutedExprs = {},
4518
4514
bool FullySubstituted = false )
4519
4515
: Expr(PackIndexingExprClass, Type, VK_LValue, OK_Ordinary),
4520
4516
EllipsisLoc (EllipsisLoc), RSquareLoc(RSquareLoc),
4521
- SubExprs{PackIdExpr, IndexExpr},
4522
- TransformedExpressions (SubstitutedExprs.size()),
4523
- FullySubstituted(FullySubstituted) {
4524
-
4517
+ SubExprs{PackIdExpr, IndexExpr} {
4518
+ PackIndexingExprBits.TransformedExpressions = SubstitutedExprs.size ();
4519
+ PackIndexingExprBits.FullySubstituted = FullySubstituted;
4525
4520
auto *Exprs = getTrailingObjects<Expr *>();
4526
4521
llvm::uninitialized_copy (SubstitutedExprs, Exprs);
4527
4522
@@ -4534,7 +4529,7 @@ class PackIndexingExpr final
4534
4529
PackIndexingExpr (EmptyShell Empty) : Expr(PackIndexingExprClass, Empty) {}
4535
4530
4536
4531
unsigned numTrailingObjects (OverloadToken<Expr *>) const {
4537
- return TransformedExpressions;
4532
+ return PackIndexingExprBits. TransformedExpressions ;
4538
4533
}
4539
4534
4540
4535
public:
@@ -4548,11 +4543,14 @@ class PackIndexingExpr final
4548
4543
unsigned NumTransformedExprs);
4549
4544
4550
4545
// The index expression and all elements of the pack have been substituted.
4551
- bool isFullySubstituted () const { return FullySubstituted; }
4546
+ bool isFullySubstituted () const {
4547
+ return PackIndexingExprBits.FullySubstituted ;
4548
+ }
4552
4549
4553
4550
// / Determine if the expression was expanded to empty.
4554
4551
bool expandsToEmptyPack () const {
4555
- return isFullySubstituted () && TransformedExpressions == 0 ;
4552
+ return isFullySubstituted () &&
4553
+ PackIndexingExprBits.TransformedExpressions == 0 ;
4556
4554
}
4557
4555
4558
4556
// / Determine the location of the 'sizeof' keyword.
@@ -4590,7 +4588,8 @@ class PackIndexingExpr final
4590
4588
4591
4589
// / Return the trailing expressions, regardless of the expansion.
4592
4590
ArrayRef<Expr *> getExpressions () const {
4593
- return {getTrailingObjects<Expr *>(), TransformedExpressions};
4591
+ return {getTrailingObjects<Expr *>(),
4592
+ PackIndexingExprBits.TransformedExpressions };
4594
4593
}
4595
4594
4596
4595
static bool classof (const Stmt *T) {
@@ -4988,7 +4987,6 @@ class CXXFoldExpr : public Expr {
4988
4987
// than the number of expansions.
4989
4988
UnsignedOrNone NumExpansions = std::nullopt;
4990
4989
Stmt *SubExprs[SubExpr::Count];
4991
- BinaryOperatorKind Opcode;
4992
4990
4993
4991
public:
4994
4992
CXXFoldExpr (QualType T, UnresolvedLookupExpr *Callee,
@@ -5021,7 +5019,7 @@ class CXXFoldExpr : public Expr {
5021
5019
SourceLocation getLParenLoc () const { return LParenLoc; }
5022
5020
SourceLocation getRParenLoc () const { return RParenLoc; }
5023
5021
SourceLocation getEllipsisLoc () const { return EllipsisLoc; }
5024
- BinaryOperatorKind getOperator () const { return Opcode; }
5022
+ BinaryOperatorKind getOperator () const { return CXXFoldExprBits. Opcode ; }
5025
5023
5026
5024
UnsignedOrNone getNumExpansions () const { return NumExpansions; }
5027
5025
0 commit comments