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