@@ -2974,10 +2974,6 @@ class TypeTraitExpr final
29742974// / __array_extent(int[10][20], 1) == 20
29752975// / \endcode
29762976class ArrayTypeTraitExpr : public Expr {
2977- // / The trait. An ArrayTypeTrait enum in MSVC compat unsigned.
2978- LLVM_PREFERRED_TYPE (ArrayTypeTrait)
2979- unsigned ATT : 2 ;
2980-
29812977 // / The value of the type trait. Unspecified if dependent.
29822978 uint64_t Value = 0 ;
29832979
@@ -2999,21 +2995,27 @@ class ArrayTypeTraitExpr : public Expr {
29992995 ArrayTypeTraitExpr (SourceLocation loc, ArrayTypeTrait att,
30002996 TypeSourceInfo *queried, uint64_t value, Expr *dimension,
30012997 SourceLocation rparen, QualType ty)
3002- : Expr(ArrayTypeTraitExprClass, ty, VK_PRValue, OK_Ordinary), ATT(att),
2998+ : Expr(ArrayTypeTraitExprClass, ty, VK_PRValue, OK_Ordinary),
30032999 Value (value), Dimension(dimension), Loc(loc), RParen(rparen),
30043000 QueriedType(queried) {
30053001 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!" );
30073005 setDependence (computeDependence (this ));
30083006 }
30093007
30103008 explicit ArrayTypeTraitExpr (EmptyShell Empty)
3011- : Expr(ArrayTypeTraitExprClass, Empty), ATT(0 ) {}
3009+ : Expr(ArrayTypeTraitExprClass, Empty) {
3010+ ArrayTypeTraitExprBits.ATT = 0 ;
3011+ }
30123012
30133013 SourceLocation getBeginLoc () const LLVM_READONLY { return Loc; }
30143014 SourceLocation getEndLoc () const LLVM_READONLY { return RParen; }
30153015
3016- ArrayTypeTrait getTrait () const { return static_cast <ArrayTypeTrait>(ATT); }
3016+ ArrayTypeTrait getTrait () const {
3017+ return static_cast <ArrayTypeTrait>(ArrayTypeTraitExprBits.ATT );
3018+ }
30173019
30183020 QualType getQueriedType () const { return QueriedType->getType (); }
30193021
@@ -3045,14 +3047,6 @@ class ArrayTypeTraitExpr : public Expr {
30453047// / __is_lvalue_expr(1) == false
30463048// / \endcode
30473049class 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-
30563050 // / The location of the type trait keyword.
30573051 SourceLocation Loc;
30583052
@@ -3068,24 +3062,32 @@ class ExpressionTraitExpr : public Expr {
30683062 ExpressionTraitExpr (SourceLocation loc, ExpressionTrait et, Expr *queried,
30693063 bool value, SourceLocation rparen, QualType resultType)
30703064 : 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+
30733069 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!" );
30753072 setDependence (computeDependence (this ));
30763073 }
30773074
30783075 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+ }
30803080
30813081 SourceLocation getBeginLoc () const LLVM_READONLY { return Loc; }
30823082 SourceLocation getEndLoc () const LLVM_READONLY { return RParen; }
30833083
3084- ExpressionTrait getTrait () const { return static_cast <ExpressionTrait>(ET); }
3084+ ExpressionTrait getTrait () const {
3085+ return static_cast <ExpressionTrait>(ExpressionTraitExprBits.ET );
3086+ }
30853087
30863088 Expr *getQueriedExpression () const { return QueriedExpression; }
30873089
3088- bool getValue () const { return Value; }
3090+ bool getValue () const { return ExpressionTraitExprBits. Value ; }
30893091
30903092 static bool classof (const Stmt *T) {
30913093 return T->getStmtClass () == ExpressionTraitExprClass;
@@ -4506,22 +4508,15 @@ class PackIndexingExpr final
45064508 // The pack being indexed, followed by the index
45074509 Stmt *SubExprs[2 ];
45084510
4509- // The size of the trailing expressions.
4510- unsigned TransformedExpressions : 31 ;
4511-
4512- LLVM_PREFERRED_TYPE (bool )
4513- unsigned FullySubstituted : 1 ;
4514-
45154511 PackIndexingExpr (QualType Type, SourceLocation EllipsisLoc,
45164512 SourceLocation RSquareLoc, Expr *PackIdExpr, Expr *IndexExpr,
45174513 ArrayRef<Expr *> SubstitutedExprs = {},
45184514 bool FullySubstituted = false )
45194515 : Expr(PackIndexingExprClass, Type, VK_LValue, OK_Ordinary),
45204516 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;
45254520 auto *Exprs = getTrailingObjects<Expr *>();
45264521 llvm::uninitialized_copy (SubstitutedExprs, Exprs);
45274522
@@ -4534,7 +4529,7 @@ class PackIndexingExpr final
45344529 PackIndexingExpr (EmptyShell Empty) : Expr(PackIndexingExprClass, Empty) {}
45354530
45364531 unsigned numTrailingObjects (OverloadToken<Expr *>) const {
4537- return TransformedExpressions;
4532+ return PackIndexingExprBits. TransformedExpressions ;
45384533 }
45394534
45404535public:
@@ -4548,11 +4543,14 @@ class PackIndexingExpr final
45484543 unsigned NumTransformedExprs);
45494544
45504545 // 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+ }
45524549
45534550 // / Determine if the expression was expanded to empty.
45544551 bool expandsToEmptyPack () const {
4555- return isFullySubstituted () && TransformedExpressions == 0 ;
4552+ return isFullySubstituted () &&
4553+ PackIndexingExprBits.TransformedExpressions == 0 ;
45564554 }
45574555
45584556 // / Determine the location of the 'sizeof' keyword.
@@ -4590,7 +4588,8 @@ class PackIndexingExpr final
45904588
45914589 // / Return the trailing expressions, regardless of the expansion.
45924590 ArrayRef<Expr *> getExpressions () const {
4593- return {getTrailingObjects<Expr *>(), TransformedExpressions};
4591+ return {getTrailingObjects<Expr *>(),
4592+ PackIndexingExprBits.TransformedExpressions };
45944593 }
45954594
45964595 static bool classof (const Stmt *T) {
@@ -4988,7 +4987,6 @@ class CXXFoldExpr : public Expr {
49884987 // than the number of expansions.
49894988 UnsignedOrNone NumExpansions = std::nullopt ;
49904989 Stmt *SubExprs[SubExpr::Count];
4991- BinaryOperatorKind Opcode;
49924990
49934991public:
49944992 CXXFoldExpr (QualType T, UnresolvedLookupExpr *Callee,
@@ -5021,7 +5019,7 @@ class CXXFoldExpr : public Expr {
50215019 SourceLocation getLParenLoc () const { return LParenLoc; }
50225020 SourceLocation getRParenLoc () const { return RParenLoc; }
50235021 SourceLocation getEllipsisLoc () const { return EllipsisLoc; }
5024- BinaryOperatorKind getOperator () const { return Opcode; }
5022+ BinaryOperatorKind getOperator () const { return CXXFoldExprBits. Opcode ; }
50255023
50265024 UnsignedOrNone getNumExpansions () const { return NumExpansions; }
50275025
0 commit comments