On 7 January 2013 19:50, Richard Smith <[email protected]> wrote: > Author: rsmith > Date: Mon Jan 7 18:50:27 2013 > New Revision: 171827 > > URL: http://llvm.org/viewvc/llvm-project?rev=171827&view=rev > Log: > Move ref qualifiers from Type bitfields into FunctionProtoType, stealing two > bits from the number of parameters. This brings the bitfields down from 33 > bits > to 32 bits, reducing the size of Types by 4 bytes on 32-bit systems.
Should we add static asserts about the size of some really important classes? > Modified: > cfe/trunk/include/clang/AST/Type.h > cfe/trunk/lib/AST/Type.cpp > > Modified: cfe/trunk/include/clang/AST/Type.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=171827&r1=171826&r2=171827&view=diff > ============================================================================== > --- cfe/trunk/include/clang/AST/Type.h (original) > +++ cfe/trunk/include/clang/AST/Type.h Mon Jan 7 18:50:27 2013 > @@ -1274,11 +1274,6 @@ > /// C++ 8.3.5p4: The return type, the parameter type list and the > /// cv-qualifier-seq, [...], are part of the function type. > unsigned TypeQuals : 3; > - > - /// \brief The ref-qualifier associated with a \c FunctionProtoType. > - /// > - /// This is a value of type \c RefQualifierKind. > - unsigned RefQualifier : 2; > }; > > class ObjCObjectTypeBitfields { > @@ -2693,8 +2688,7 @@ > > protected: > FunctionType(TypeClass tc, QualType res, > - unsigned typeQuals, RefQualifierKind RefQualifier, > - QualType Canonical, bool Dependent, > + unsigned typeQuals, QualType Canonical, bool Dependent, > bool InstantiationDependent, > bool VariablyModified, bool ContainsUnexpandedParameterPack, > ExtInfo Info) > @@ -2703,14 +2697,9 @@ > ResultType(res) { > FunctionTypeBits.ExtInfo = Info.Bits; > FunctionTypeBits.TypeQuals = typeQuals; > - FunctionTypeBits.RefQualifier = static_cast<unsigned>(RefQualifier); > } > unsigned getTypeQuals() const { return FunctionTypeBits.TypeQuals; } > > - RefQualifierKind getRefQualifier() const { > - return static_cast<RefQualifierKind>(FunctionTypeBits.RefQualifier); > - } > - > public: > > QualType getResultType() const { return ResultType; } > @@ -2742,7 +2731,7 @@ > /// no information available about its arguments. > class FunctionNoProtoType : public FunctionType, public llvm::FoldingSetNode > { > FunctionNoProtoType(QualType Result, QualType Canonical, ExtInfo Info) > - : FunctionType(FunctionNoProto, Result, 0, RQ_None, Canonical, > + : FunctionType(FunctionNoProto, Result, 0, Canonical, > /*Dependent=*/false, /*InstantiationDependent=*/false, > Result->isVariablyModifiedType(), > /*ContainsUnexpandedParameterPack=*/false, Info) {} > @@ -2815,7 +2804,7 @@ > QualType canonical, const ExtProtoInfo &epi); > > /// NumArgs - The number of arguments this function has, not counting > '...'. > - unsigned NumArgs : 17; > + unsigned NumArgs : 15; > > /// NumExceptions - The number of types in the exception spec, if any. > unsigned NumExceptions : 9; > @@ -2832,6 +2821,11 @@ > /// HasTrailingReturn - Whether this function has a trailing return type. > unsigned HasTrailingReturn : 1; > > + /// \brief The ref-qualifier associated with a \c FunctionProtoType. > + /// > + /// This is a value of type \c RefQualifierKind. > + unsigned RefQualifier : 2; > + > // ArgInfo - There is an variable size array after the class in memory that > // holds the argument types. > > @@ -2979,7 +2973,7 @@ > > /// \brief Retrieve the ref-qualifier associated with this function type. > RefQualifierKind getRefQualifier() const { > - return FunctionType::getRefQualifier(); > + return static_cast<RefQualifierKind>(RefQualifier); > } > > typedef const QualType *arg_type_iterator; > > Modified: cfe/trunk/lib/AST/Type.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Type.cpp?rev=171827&r1=171826&r2=171827&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/Type.cpp (original) > +++ cfe/trunk/lib/AST/Type.cpp Mon Jan 7 18:50:27 2013 > @@ -1561,7 +1561,7 @@ > FunctionProtoType::FunctionProtoType(QualType result, const QualType *args, > unsigned numArgs, QualType canonical, > const ExtProtoInfo &epi) > - : FunctionType(FunctionProto, result, epi.TypeQuals, epi.RefQualifier, > + : FunctionType(FunctionProto, result, epi.TypeQuals, > canonical, > result->isDependentType(), > result->isInstantiationDependentType(), > @@ -1571,8 +1571,11 @@ > NumArgs(numArgs), NumExceptions(epi.NumExceptions), > ExceptionSpecType(epi.ExceptionSpecType), > HasAnyConsumedArgs(epi.ConsumedArguments != 0), > - Variadic(epi.Variadic), HasTrailingReturn(epi.HasTrailingReturn) > + Variadic(epi.Variadic), HasTrailingReturn(epi.HasTrailingReturn), > + RefQualifier(epi.RefQualifier) > { > + assert(NumArgs == numArgs && "function has too many parameters"); > + > // Fill in the trailing argument array. > QualType *argSlot = reinterpret_cast<QualType*>(this+1); > for (unsigned i = 0; i != numArgs; ++i) { > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
