]> granicus.if.org Git - clang/commitdiff
Make sure that the layout-override parser grabs the size, not the data
authorDouglas Gregor <dgregor@apple.com>
Fri, 3 Feb 2012 19:31:51 +0000 (19:31 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 3 Feb 2012 19:31:51 +0000 (19:31 +0000)
size. Otherwise, we can end up with bogus layouts.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149703 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/LayoutOverrideSource.cpp
test/CodeGenCXX/override-layout.cpp

index 3af2cc2bbe7565e146f314519680bd117b27ab11..9cc066785052acb874d0ebf3d8d982e46dcf6073 100644 (file)
@@ -73,10 +73,10 @@ LayoutOverrideSource::LayoutOverrideSource(llvm::StringRef Filename) {
     }
     
     // Check for the size of the type.
-    StringRef::size_type Pos = LineStr.find("Size:");
+    StringRef::size_type Pos = LineStr.find(" Size:");
     if (Pos != StringRef::npos) {
-      // Skip past the "Size:" prefix.
-      LineStr = LineStr.substr(Pos + strlen("Size:"));
+      // Skip past the " Size:" prefix.
+      LineStr = LineStr.substr(Pos + strlen(" Size:"));
       
       unsigned long long Size = 0;
       (void)LineStr.getAsInteger(10, Size);
index c09dbeff703110a51a53e14752cf6a105e2ee092..d432885c584845c2f7e3f8934327a56e1ce31b44 100644 (file)
@@ -35,16 +35,30 @@ struct PACKED X3 : virtual public X1, public X0 {
   int y;
 };
 
-void use_structs() {
-  struct X0 x0;
-  x0.x[5] = sizeof(struct X0);
-
-  struct X1 x1;
-  x1.x[5] = sizeof(struct X1);
-
-  struct X2 x2;
-  x2.y = sizeof(struct X2);
+// CHECK: Type: struct X4
+struct PACKED X4 {
+  unsigned int a : 1;
+  unsigned int b : 1;
+  unsigned int c : 1;
+  unsigned int d : 1;
+  unsigned int e : 1;
+  unsigned int f : 1;
+  unsigned int g : 1;
+  unsigned int h : 1;
+  unsigned int i : 1;
+  unsigned int j : 1;
+  unsigned int k : 1;
+  unsigned int l : 1;
+  unsigned int m : 1;
+  unsigned int n : 1;
+  X4();
+};
 
-  struct X3 x3;
-  x3.y = sizeof(struct X3);
+void use_structs() {
+  X0 x0s[sizeof(X0)];
+  X1 x1s[sizeof(X1)];
+  X2 x2s[sizeof(X2)];
+  X3 x3s[sizeof(X3)];
+  X4 x4s[sizeof(X4)];
+  x4s[1].a = 1;
 }