aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.apple/bitreverse-10.c
blob: 2656ed24ade737aa2a1d7192dcd726f797e5ad2e (plain)
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
/* APPLE LOCAL file */
/* { dg-do run { target powerpc*-*-darwin* } } */
/* { dg-options "-std=c99" } */
extern void abort();
typedef struct TestStateNorm
{
    unsigned int fBlah : 7;     //  
    unsigned int fUnused : 2;                // Currently Unused
    unsigned int : 0;
    unsigned int fBlah2 : 7;     //  
    unsigned int fUnused2: 2;                // Currently Unused
} TestStateNorm;

TestStateNorm v1norm = { 5, 1, 6, 2 };

union {
  TestStateNorm tsn;
  unsigned int raw[2];
} unorm = { 5, 1, 6, 2 };

#pragma reverse_bitfields on
#pragma ms_struct on
typedef struct TestState 
{
    unsigned int fBlah : 7;     //  
    unsigned int fUnused : 2;                // Currently Unused
    unsigned int : 0;
    unsigned int fBlah2 : 7;     //  
    unsigned int fUnused2 : 2;                // Currently Unused
} TestState;

TestState v1 = { 5, 1, 6, 2 };

union {
  TestState ts;
  unsigned int raw[2];
} u = { 5, 1, 6, 2 };

int main(){
  if (v1norm.fBlah != 5) abort ();
  if (v1norm.fUnused != 1) abort ();
  if (v1norm.fBlah2 != 6) abort ();
  if (v1norm.fUnused2 != 2) abort ();

  if (u.ts.fBlah != 5) abort ();
  if (u.ts.fUnused != 1) abort ();
  if (u.ts.fBlah2 != 6) abort ();
  if (u.ts.fUnused2 != 2) abort ();

  if (unorm.tsn.fBlah != 5) abort ();
  if (unorm.tsn.fUnused != 1) abort ();
  if (unorm.tsn.fBlah2 != 6) abort ();
  if (unorm.tsn.fUnused2 != 2) abort ();

  if (v1.fBlah != 5) abort ();
  if (v1.fUnused != 1) abort ();
  if (v1.fBlah2 != 6) abort ();
  if (v1.fUnused2 != 2) abort ();

  if (unorm.raw[0] != 0x0a800000) abort();
  if (unorm.raw[1] != 0x0d000000) abort();
  if (u.raw[0] != 0x00000085) abort();
  if (u.raw[1] != 0x00000106) abort();
  return 0;
}