From: Benjamin Kramer Date: Fri, 3 Jul 2015 15:12:36 +0000 (+0000) Subject: StmtIterator: Put stmt and decl group pointer into a union. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6baffe87cddc386973a8009486477f2e7f828142;p=clang StmtIterator: Put stmt and decl group pointer into a union. Reduce the size of StmtIterator without changing behavior. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241356 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/StmtIterator.h b/include/clang/AST/StmtIterator.h index ec7329a4a0..a5a57af523 100644 --- a/include/clang/AST/StmtIterator.h +++ b/include/clang/AST/StmtIterator.h @@ -32,8 +32,10 @@ protected: enum { StmtMode = 0x0, SizeOfTypeVAMode = 0x1, DeclGroupMode = 0x2, Flags = 0x3 }; - Stmt **stmt; - Decl **DGI; + union { + Stmt **stmt; + Decl **DGI; + }; uintptr_t RawVAPtr; Decl **DGE; @@ -64,10 +66,10 @@ protected: Stmt*& GetDeclExpr() const; - StmtIteratorBase(Stmt **s) : stmt(s), DGI(nullptr), RawVAPtr(0) {} + StmtIteratorBase(Stmt **s) : stmt(s), RawVAPtr(0) {} StmtIteratorBase(const VariableArrayType *t); StmtIteratorBase(Decl **dgi, Decl **dge); - StmtIteratorBase() : stmt(nullptr), DGI(nullptr), RawVAPtr(0) {} + StmtIteratorBase() : stmt(nullptr), RawVAPtr(0) {} }; diff --git a/lib/AST/StmtIterator.cpp b/lib/AST/StmtIterator.cpp index 1ccba04d9f..732756fbec 100644 --- a/lib/AST/StmtIterator.cpp +++ b/lib/AST/StmtIterator.cpp @@ -93,12 +93,12 @@ bool StmtIteratorBase::HandleDecl(Decl* D) { } StmtIteratorBase::StmtIteratorBase(Decl** dgi, Decl** dge) - : stmt(nullptr), DGI(dgi), RawVAPtr(DeclGroupMode), DGE(dge) { + : DGI(dgi), RawVAPtr(DeclGroupMode), DGE(dge) { NextDecl(false); } StmtIteratorBase::StmtIteratorBase(const VariableArrayType* t) - : stmt(nullptr), DGI(nullptr), RawVAPtr(SizeOfTypeVAMode) { + : DGI(nullptr), RawVAPtr(SizeOfTypeVAMode) { RawVAPtr |= reinterpret_cast(t); }