reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
  146
  147
  148
  149
  150
  151
  152
  153
  154
  155
  156
  157
  158
  159
  160
  161
  162
  163
  164
  165
  166
  167
  168
  169
  170
  171
  172
  173
  174
  175
  176
  177
  178
  179
// RUN: %clang_cc1 -emit-llvm -o - -triple x86_64-apple-darwin9 %s | FileCheck %s
// RUN: %clang_cc1 -emit-llvm -o - -triple thumbv7-apple-ios -target-abi apcs-gnu %s | FileCheck %s -check-prefix=CHECK-ARM

// rdar://8823265

// Note that we're declaring global variables with these types,
// triggering both Sema and IRGen struct layout.

#define ATTR __attribute__((__ms_struct__))

struct
{
   char foo;
   long : 0;
   char bar;
} ATTR t1;
int s1 = sizeof(t1);
// CHECK: @s1 = global i32 2
// CHECK-ARM: @s1 = global i32 2

struct
{
   char foo;
   long : 0;
   char : 0;
   int : 0;
   char bar;
} ATTR t2;
int s2 = sizeof(t2);
// CHECK: @s2 = global i32 2
// CHECK-ARM: @s2 = global i32 2

struct
{
   char foo;
   long : 0;
   char : 0;
   int : 0;
   char bar;
   long : 0;
   char : 0;
} ATTR t3;
int s3 = sizeof(t3);
// CHECK: @s3 = global i32 2
// CHECK-ARM: @s3 = global i32 2

struct
{
   long : 0;
   char bar;
} ATTR t4;
int s4 = sizeof(t4);
// CHECK: @s4 = global i32 1
// CHECK-ARM: @s4 = global i32 1

struct
{
   long : 0;
   long : 0;
   char : 0;
   char bar;
} ATTR t5;
int s5 = sizeof(t5);
// CHECK: @s5 = global i32 1
// CHECK-ARM: @s5 = global i32 1

struct
{
   long : 0;
   long : 0;
   char : 0;
   char bar;
} ATTR t6;
int s6 = sizeof(t6);
// CHECK: @s6 = global i32 1
// CHECK-ARM: @s6 = global i32 1

struct
{
   char foo;
   long : 0;
   int : 0;
   char bar;
   char bar1;
   long : 0;
   char bar2;
   char bar3;
   char : 0;
   char bar4;
   char bar5;
   char : 0;
   char bar6;
   char bar7;
} ATTR t7;
int s7 = sizeof(t7);
// CHECK: @s7 = global i32 9
// CHECK-ARM: @s7 = global i32 9

struct
{
   long : 0;
   long : 0;
   char : 0;
} ATTR t8;
int s8 = sizeof(t8);
// CHECK: @s8 = global i32 0
// CHECK-ARM: @s8 = global i32 0

struct
{
   char foo;
   long : 0;
   int : 0;
   char bar;
   char bar1;
   long : 0;
   char bar2;
   char bar3;
   char : 0;
   char bar4;
   char bar5;
   char : 0;
   char bar6;
   char bar7;
   int  i1;
   char : 0;
   long : 0;
   char :4;
   char bar8;
   char : 0;
   char bar9;
   char bar10;
   int  i2;
   char : 0;
   long : 0;
   char :4;
} ATTR t9;
int s9 = sizeof(t9);
// CHECK: @s9 = global i32 28
// CHECK-ARM: @s9 = global i32 28

struct
{
   char foo: 8;
   long : 0;
   char bar;
} ATTR t10;
int s10 = sizeof(t10);
// CHECK: @s10 = global i32 16
// CHECK-ARM: @s10 = global i32 8

// rdar://16041826 - ensure that ms_structs work correctly on a
// !useBitFieldTypeAlignment() target
struct {
  unsigned int a : 31;
  unsigned int b : 2;
  unsigned int c;
} ATTR t11;
int s11 = sizeof(t11);
// CHECK: @s11 = global i32 12
// CHECK-ARM: @s11 = global i32 12

struct {
  unsigned char a : 3;
  unsigned char b : 4;
  unsigned short c : 6;
} ATTR t12;
int s12 = sizeof(t12);
// CHECK: @s12 = global i32 4
// CHECK-ARM: @s12 = global i32 4

struct {
  unsigned char a : 3;
  unsigned char b : 4;
  __attribute__((packed)) unsigned short c : 6;
} ATTR t13;
int s13 = sizeof(t13);
// CHECK: @s13 = global i32 4
// CHECK-ARM: @s13 = global i32 4