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;
}
 |