about summary refs log tree commit diff homepage
path: root/test/Feature/InvalidBitfieldAccess.c.failing
blob: 0e4ec594323165e6730fb9e2f61b7076d3fbdf24 (plain) (blame)
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
// RUN: %llvmgcc -c -o %t1.bc %s
// RUN: rm -rf %t.klee-out
// RUN: %klee --output-dir=%t.klee-out --exit-on-error %t1.bc

// This is a bug in llvm-gcc4.0 but seems to be fixed in llvm-gcc4.2,
// its included here mostly as a reminder. 

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

struct foo {
  unsigned int a : 5;
  unsigned int b : 10;
  unsigned int c : 1;
} __attribute__((packed));

int main() {
  struct foo *a = malloc(sizeof *a);

  a->b = 12; // problem here is that llvm-gcc emits a 4 byte access
             // which is out of bounds.

  int x = a->b;

  assert(x == 12);

  return 0;
}