[Clang] Reduce the size of Decl and classes derived from it (#87361)
Class | Old size (in bytes) | New size (in bytes)
----------------------------------|---------------------|--------------------
Decl | 40 | 32
AccessSpecDecl | 40 | 40
BlockDecl | 128 | 120
CapturedDecl | 88 | 80
EmptyDecl | 40 | 32
ExportDecl | 80 | 72
ExternCContextDecl | 72 | 64
FileScopeAsmDecl | 56 | 48
FriendDecl | 64 | 56
FriendTemplateDecl | 64 | 64
ImplicitConceptSpecializationDecl | 40 | 40
ImportDecl | 56 | 48
LifetimeExtendedTemporaryDecl | 72 | 64
LinkageSpecDecl | 80 | 72
NamedDecl | 48 | 40
ObjCPropertyImplDecl | 96 | 88
PragmaCommentDecl | 40 | 40
PragmaDetectMismatchDecl | 48 | 40
RequiresExprBodyDecl | 72 | 64
StaticAssertDecl | 64 | 56
TopLevelStmtDecl | 88 | 80
TranslationUnitDecl | 104 | 96
BaseUsingDecl | 56 | 48
UsingDecl | 88 | 80
UsingEnumDecl | 72 | 64
HLSLBufferDecl | 96 | 88
LabelDecl | 80 | 72
NamespaceAliasDecl | 96 | 88
NamespaceDecl | 112 | 104
ObjCCompatibleAliasDecl | 56 | 48
ObjCContainerDecl | 88 | 80
ObjCMethodDecl | 136 | 128
ObjCPropertyDecl | 128 | 120
TemplateDecl | 64 | 56
BuiltinTemplateDecl | 72 | 64
TypeDecl | 64 | 56
UnresolvedUsingIfExistsDecl | 48 | 40
UsingDirectiveDecl | 88 | 80
UsingPackDecl | 64 | 56
UsingShadowDecl | 80 | 72
ValueDecl | 56 | 48
When parsing libc++'s `<string>` header the used memory is reduced from
42.8MB to 42.5MB.