diff options
Diffstat (limited to 'clang/CodeGen/CodeGenTypes.h')
-rw-r--r-- | clang/CodeGen/CodeGenTypes.h | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/CodeGen/CodeGenTypes.h b/clang/CodeGen/CodeGenTypes.h index 68dcd21b42f..a5b540188f4 100644 --- a/clang/CodeGen/CodeGenTypes.h +++ b/clang/CodeGen/CodeGenTypes.h @@ -78,12 +78,19 @@ class CodeGenTypes { class BitFieldInfo { public: - explicit BitFieldInfo(unsigned N, unsigned B, unsigned E) - : No(N), Begin(B), End(E) {} + explicit BitFieldInfo(unsigned N, unsigned B, unsigned E, unsigned A) + : No(N), Begin(B), End(E), AccessFieldNo(A) {} private: + // No - Field number in llvm struct. unsigned No; unsigned Begin; unsigned End; + // AccessFieldNo - llvm struct field number that is used to + // access this field. It may be not same as No. For example, + // struct S { char a; short b:2; } + // Here field 'b' is second field however it is accessed as + // 9th and 10th bitfield of first field whose type is short. + unsigned AccessFieldNo; }; llvm::DenseMap<const FieldDecl *, BitFieldInfo> BitFields; @@ -125,7 +132,7 @@ public: /// addFieldInfo - Assign field number to field FD. void addFieldInfo(const FieldDecl *FD, unsigned No, unsigned Begin, - unsigned End); + unsigned End, unsigned AccessNo); }; } // end namespace CodeGen |