[llvm-branch-commits] [cfe-branch] r121566 - in /cfe/branches/Apple/whitney: lib/AST/RecordLayoutBuilder.cpp test/SemaCXX/pragma-pack.cpp

Daniel Dunbar daniel at zuster.org
Fri Dec 10 13:38:23 PST 2010


Author: ddunbar
Date: Fri Dec 10 15:38:23 2010
New Revision: 121566

URL: http://llvm.org/viewvc/llvm-project?rev=121566&view=rev
Log:
Merge r121352:
--
Author: Argyrios Kyrtzidis <akyrtzi at gmail.com>
Date:   Thu Dec 9 02:47:58 2010 +0000

    Fix another unnecessary-struct-padding issue.

Modified:
    cfe/branches/Apple/whitney/lib/AST/RecordLayoutBuilder.cpp
    cfe/branches/Apple/whitney/test/SemaCXX/pragma-pack.cpp

Modified: cfe/branches/Apple/whitney/lib/AST/RecordLayoutBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/whitney/lib/AST/RecordLayoutBuilder.cpp?rev=121566&r1=121565&r2=121566&view=diff
==============================================================================
--- cfe/branches/Apple/whitney/lib/AST/RecordLayoutBuilder.cpp (original)
+++ cfe/branches/Apple/whitney/lib/AST/RecordLayoutBuilder.cpp Fri Dec 10 15:38:23 2010
@@ -823,8 +823,17 @@
   Size += GetVirtualPointersSize(RD);
   DataSize = Size;
 
+  unsigned UnpackedBaseAlign = Context.Target.getPointerAlign(0);
+  unsigned BaseAlign = (Packed) ? 8 : UnpackedBaseAlign;
+
+  // The maximum field alignment overrides base align.
+  if (MaxFieldAlignment) {
+    BaseAlign = std::min(BaseAlign, MaxFieldAlignment);
+    UnpackedBaseAlign = std::min(UnpackedBaseAlign, MaxFieldAlignment);
+  }
+
   // Update the alignment.
-  UpdateAlignment(Context.Target.getPointerAlign(0));
+  UpdateAlignment(BaseAlign, UnpackedBaseAlign);
 }
 
 BaseSubobjectInfo *

Modified: cfe/branches/Apple/whitney/test/SemaCXX/pragma-pack.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/whitney/test/SemaCXX/pragma-pack.cpp?rev=121566&r1=121565&r2=121566&view=diff
==============================================================================
--- cfe/branches/Apple/whitney/test/SemaCXX/pragma-pack.cpp (original)
+++ cfe/branches/Apple/whitney/test/SemaCXX/pragma-pack.cpp Fri Dec 10 15:38:23 2010
@@ -6,11 +6,29 @@
   int i;
 };
 
-#pragma pack(1)
+#pragma pack(push, 1)
 struct Sub : public Base {
   char c;
 };
+#pragma pack(pop)
 
 int check[sizeof(Sub) == 5 ? 1 : -1];
 
 }
+
+namespace check2 {
+
+struct Base {
+  virtual ~Base();
+  int x;
+};
+
+#pragma pack(push, 1)
+struct Sub : virtual Base {
+  char c;
+};
+#pragma pack(pop)
+
+int check[sizeof(Sub) == 13 ? 1 : -1];
+
+}





More information about the llvm-branch-commits mailing list