]> granicus.if.org Git - clang/commitdiff
Shrink LinkageInfo from 96 bits to 8 bits.
authorBenjamin Kramer <benny.kra@googlemail.com>
Thu, 27 Sep 2012 12:52:55 +0000 (12:52 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Thu, 27 Sep 2012 12:52:55 +0000 (12:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164771 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Decl.h

index 48a081659382e4c68108caa81024e56f46c40c59..ee9fefa5bad391b77734295c5a72f3d6a73ce731 100644 (file)
@@ -214,16 +214,19 @@ public:
   bool isCXXInstanceMember() const;
 
   class LinkageInfo {
-    Linkage linkage_;
-    Visibility visibility_;
-    bool explicit_;
+    uint8_t linkage_    : 4;
+    uint8_t visibility_ : 3;
+    uint8_t explicit_   : 1;
 
     void setVisibility(Visibility V, bool E) { visibility_ = V; explicit_ = E; }
   public:
     LinkageInfo() : linkage_(ExternalLinkage), visibility_(DefaultVisibility),
                     explicit_(false) {}
     LinkageInfo(Linkage L, Visibility V, bool E)
-      : linkage_(L), visibility_(V), explicit_(E) {}
+      : linkage_(L), visibility_(V), explicit_(E) {
+      assert(linkage() == L && visibility() == V && visibilityExplicit() == E &&
+             "Enum truncated!");
+    }
 
     static LinkageInfo external() {
       return LinkageInfo();
@@ -238,8 +241,8 @@ public:
       return LinkageInfo(NoLinkage, DefaultVisibility, false);
     }
 
-    Linkage linkage() const { return linkage_; }
-    Visibility visibility() const { return visibility_; }
+    Linkage linkage() const { return (Linkage)linkage_; }
+    Visibility visibility() const { return (Visibility)visibility_; }
     bool visibilityExplicit() const { return explicit_; }
 
     void setLinkage(Linkage L) { linkage_ = L; }