|
本文列出 57 段代码以及相应的编译器版本和编译参数,在这个环境下对代码进行编译会导致编译器崩溃。
我不清楚你是否很高兴看到你的程序会让编译器崩溃的情况,反正我很喜欢,相当于发现了编译器的 bug。
本文列出 57 段代码以及相应的编译器版本和编译参数,在这个环境下对代码进行编译会导致编译器崩溃。
C1 : Crashes Clang 2.6 at -O0:
#pragma pack(1) - struct S1 {
int f0; - char f2
}; - struct {
struct S1 f0 - }
a[] = { 0 } - ;
C2 : Crashes Clang 2.6 at -O2:
struct S0 { - int f0:1;
int f4 - }
a; - void
fn1 () { - struct S0 b[][1][1] = { 0 };
b[0][0][0] = a; - }
C3 : Crashes Clang 2.6 at -O2:
unsigned short a; - int b;
char c; - short
fn1 () { - return 1 / a;
} - void
fn2 () { - b = fn1 ();
char d = b; - c = d % 3;
- }
C4 : Crashes Clang 2.6 at -O3:
int a, b, c, d, e; - #pragma pack(1)
struct S0 { - int f0:14;
int f1:13; - int f2:28;
int f3:23; - int f4:12
}; - void fn1 (struct S0);
void - fn2 () {
int f; - lbl_2311:
; - struct S0 g = { 0, 0, 1 };
fn1 (g); - b && e;
for (; c;) { - if (d)
goto lbl_2311; - f = a && 1 ? 0 : 1;
g.f4 = f; - }
- }
C5 : Crashes Clang 2.6 at -O2:
int crc32_context, g_2 = 0, g_5; - int g_8;
int *g_39, *g_371; - int g_81;
int func_1_l_15 ; - static short safe_add_func_int16_t_s_s ( short si1, int si2 ) {
return si1 > 67 ? si1 : si1 + si2; - }
- static int func_1 ( ) {
int l_462 = 0; - g_2 = 0;
for ( ; - g_2 < 12;
g_2 = safe_add_func_int16_t_s_s ( g_2, 5 ) ) { - g_5 = 1;
for ( ; - g_5;
++g_5 ) { - g_8 = 1;
for ( ; - g_8 >= 0;
g_8 = g_8 - 1 ) { - func_1_l_15 = 1;
for ( ; - func_1_l_15;
func_1_l_15 = func_1_l_15 - 1 ) if ( g_8 ) break; - }
g_371 = &l_462; - int *l_128 = &g_81;
*l_128 = *g_39; - }
*g_371 = 0 != 0 ; - }
return 0; - }
int main ( ) { - func_1 ( );
crc32_context = g_2; - crc32_context += g_5;
} -
C6 : Crashes Clang 2.6 at -O0:
#pragma pack(1) - struct S2 {
int f1; - short f4
}; - struct S3 {
struct S2 f1; - int f3:14
}; - struct {
struct S3 f3 - }
- a = { 0, 0, 0 };
C7 : Crashes Clang 2.6 at -O1:
int *a; - static int **b;
int c, d, e; - void
fn1 () { - d = &b == c;
for (;;) { - int **f = &a;
if (e) { - } else
b = f; - if (**b)
continue; - **f;
} - }
C8 : Crashes Clang 2.6 at -O1:
#pragma pack(1) - struct S0 {
int f3; - char f4
}; - struct {
struct S0 f6; - int f8
} - a = { 0, 0, 0 };
C9 : Crashes Clang 2.6 at -O2:
struct S0 { - int f0;
int f1; - short f3;
int f7; - int f8
} - b;
int a, c, d, e, f; - void
fn1 (struct S0 p1) { - d++;
c = p1.f8; - e = 0;
a = p1.f7; - }
void - fn2 () {
e = 0; - for (; e; e++) {
if (d) - for (;;) {
} - --f;
} - fn1 (b);
- }
C10 : Crashes Clang 2.6 at -O1:
union U2 { - int f0;
unsigned short f2 - }
b; - static int a = 1;
void - fn1 (int p1, unsigned short p2) {
} - int fn2 (union U2);
union U2 fn3 (); - static unsigned long long
fn5 () { - fn1 (b.f2, b.f0);
return 0; - }
static char - fn4 () {
fn5 (); - return 0;
} - int
main () { - a || fn2 (fn3 (fn4 () ) );
- }
C11 : Crashes Clang 2.7 at -O1:
int *a; - static int **b;
int c, d, e; - void
fn1 () { - d = &b == c;
for (;;) { - int **f = &a;
if (e) { - } else
b = f; - if (**b)
continue; - **f;
} - }
C12 : Crashes Clang 2.7 at -O0:
char a; - unsigned char b;
int c; - void
fn1 () { - (b ^= c) != a;
- }
C13 : Crashes Clang 2.7 at -O2:
int a, b; - void fn1 ();
void - fn2 (short p1) {
short c; - c = (65532 | 3) + p1;
fn1 (c && 1); - b = (0 == p1) * a;
- }
C14 : Crashes GCC 3.2.0 at -O1:
void - fn1 () {
struct S0 *a; - struct S0 *b, *c = &a;
struct S0 **d = &c; - if (&b == &a) {
} - }
C15 : Crashes GCC 3.2.0 at -O3:
volatile int a, b, c, i; - char d;
void - fn1 () {
int e; - {
for (;; c++) { - int f[50] = { };
if (b) { - {
0; - {
{ - int g = a, h = d;
e = h ? g : g / 0; - }
} - a = e;
} - }
} - }
} - void
main () { - i = 0 / 0;
a; - }
C16 : Crashes GCC 3.2.0 at -O3:
int a, c; - volatile int b;
void - fn1 () {
b; - for (;;)
break; - int d = b, e = a;
c = a ? d : d % 0; - }
void - fn2 () {
if (0 % 0) - b;
- }
C17 : Crashes GCC 3.2.0 at -O2:
union U1 { - int f0;
char f1 - };
void - fn1 (union U1 p1) {
p1.f1 = 0; - for (; p1.f1;) {
} - }
C18 : Crashes GCC 3.2.0 at -O1:
int a, b; - void
fn1 () { - b = 4294967290UL <= a | b;
- }
C19 : Crashes GCC 3.2.0 at -O3:
int a, b, c; - int
fn1 (int p1, int p2) { - return p1 - p2;
} - void
fn2 () { - int d;
int **e; - int ***f = &e;
d = a && b ? a : a % 0; - if (fn1 (f == 0, 2) )
c = ***f; - }
C20 : Crashes GCC 3.3.0 at -O3:
int a, b, d; - struct S0 {
int f3 - };
int *volatile c; - void fn1 (struct S0);
void - fn2 () {
int e; - struct S0 **f;
struct S0 ***g = &f; - (a && b && b ? 0 : b) > (&c && 0);
e = 0 == g; - d = e >> 1;
for (;;) - fn1 (***g);
- }
C21 : Crashes GCC 3.4.0 at -O3:
int a, b; - struct U0 {
char f0; - int f2
}; - void
fn1 () { - struct U0 c;
for (; c.f0 != 1; c.f0 = c.f0 + a) - b -= 1;
- }
C22 : Crashes GCC 3.4.0 at -O3:
int a, b, d, e; - struct S0 {
int f3 - };
int *c; - void fn1 (struct S0);
void - fn2 () {
struct S0 **f; - struct S0 ***g = &f;
(a && b && b ? 0 : b) > (&c == d); - e = 1 < (0 == g);
for (;;) - fn1 (***g);
- }
C23 : Crashes GCC 4.0.0 at -O2:
int ***a; - int b;
int *c; - void
main () { - if (&c == a)
b = 0 == *a; - }
C24 : Crashes GCC 4.0.0 at -O2:
int a[][0]; - int *const b = &a[0][1];
int - fn1 () {
return *b; - }
C25 : Crashes GCC 4.0.0 at -O0:
int a, b; - unsigned char c;
void - fn1 () {
(0 >= a & (0 || b) ) > c; - }
C26 : Crashes GCC 4.0.0 at -O1:
struct { - int f9:1
} - a;
const int b[] = { 0 }; - void fn1 ();
void - main () {
for (;;) { - a.f9 = b[0];
fn1 (); - }
- }
C27 : Crashes GCC 4.0.0 at -O0:
int a, c; - unsigned char b;
void - fn1 () {
b > (c > 0 & 0 < a); - }
C28 : Crashes GCC 4.0.0 at -O2:
int **a[][0]; - static int ***const b = &a[0][1];
void fn1 (); - int
fn2 () { - return ***b;
fn1 (); - }
void - fn1 () {
**b; - }
C29 : Crashes GCC 4.1.0 at -O1:
volatile int ***a; - int b;
int **c; - void
fn1 () { - if (&c == a)
b = 0 == *a; - }
C30 : Crashes GCC 4.1.0 at -O1:
struct { - int f0;
int f2 - }
a; - int b;
void - fn1 () {
a.f2 = 0; - int *c[] = { 0, 0, 0, 0, &a.f0, 0, 0, 0, &a.f0 };
b = *c[4]; - }
C31 : Crashes GCC 4.1.0 at -O2:
int a, b; - unsigned c;
void - fn1 () {
for (; c <= 0;) - if (b < c)
a = 1 && c; - }
C32 : Crashes GCC 4.1.0 at -O1:
unsigned a; - int b;
void - main () {
unsigned c = 4294967295; - int d = c;
b = a <= d || a; - }
C33 : Crashes GCC 4.1.0 at -O1:
const volatile long a; - void
main () { - printf ("%d\n", (int) a);
- }
C34 : Crashes GCC 4.1.0 at -O3:
int a, b; - union U1 {
int f0; - int f1
}; - void
fn1 () { - union U1 c = { 1 };
int d = 1; - if ( (c.f1 & a ? c.f1 : 1 - a) ^ d) {
} else - b = 0;
- }
C35 : Crashes GCC 4.2.0 at -O1:
volatile int ***a; - int b;
int **c; - void
fn1 () { - if (&c == a)
b = 0 == *a; - }
C36 : Crashes GCC 4.2.0 at -O1:
struct S2 { - volatile int f5:1;
int f6 - };
static struct S2 a; - void
main () { - printf ("%d\n", a.f5);
- }
C37 : Crashes GCC 4.3.0 at -O1:
long long *a; - int b;
void - fn1 () {
long long **c = &a; - int d = 7;
lbl_2890: { - long long **e = &a;
b = (e == c) < d; - d = 0;
goto lbl_2890; - }
- }
C38 : Crashes GCC 4.3.0 at -O2:
struct S2 { - volatile int f5:1;
int f6 - };
static struct S2 a; - void
main () { - printf ("%d\n", a.f5);
- }
C39 : Crashes GCC 4.3.0 at -O3:
int a; - short b;
void - fn1 () {
int c[0]; - for (;;) {
a = c[0]; - b = 0;
for (; b < 7; b += 1) - c = 0;
} - }
C40 : Crashes GCC 4.3.0 at -O1:
volatile int **a; - int *b;
void - fn1 () {
if (a == &b) - **a;
- }
C41 : Crashes GCC 4.3.0 at -O3:
int a, b, c, d, e, f; - void
fn1 () { - char g;
lbl_120: - if (b || e >= 0 & d >= 0 || a)
return; - g = f < 0 ? 1 : f;
d = g == 0 || (char) f == 0 && g == 1 ? 0 : 0 % 0; - if (c)
goto lbl_120; - }
C42 : Crashes Intel CC 12.0.5 at -O1:
struct U0 { - int f0
} - a;
struct U0 - fn1 () {
return a; - }
void - main () {
0 > a.f0; - fn1 ();
- }
C43 : Crashes Open64 4.2.4 at -O3:
int a; - int *b;
unsigned c; - void
fn1 () { - for (; a; a--)
if (*b) { - c = 0;
for (; c >= 5; c++) { - }
} - }
C44 : Crashes Open64 4.2.4 at -O3:
short a; - void
fn1 () { - long b;
b = 44067713550; - a |= b;
- }
C45 : Crashes Open64 4.2.4 at -O3:
volatile int a; - void
fn1 () { - int b = 1;
a || b--; - }
C46 : Crashes Open64 4.2.4 at -O2:
int a, b; - void fn1 ();
void fn2 (); - void
fn3 () { - fn2 ();
fn1 (); - }
void - fn2 () {
if (1) { - } else
for (;; b++) { - int c = 0;
int *d = &a; - int **e = &d;
*e = &c; - *d = 0;
*d |= 0; - }
- }
C47 : Crashes Open64 4.2.4 at -O3:
struct S0 { - int f1:1
}; - int a, b;
void - fn1 () {
for (; b;) { - struct S0 c = { };
if (1) { - c = c;
a = c.f1; - }
} - }
C48 : Crashes Open64 4.2.4 at -O3:
int a, b; - int
fn1 () { - int *c = &b;
a = 0; - for (; a >= -26; --a) {
unsigned d = 18446744073709551615; - int *e = &b;
*e &= d; - }
return *c; - }
C49 : Crashes Open64 4.2.4 at -O3:
static int a, c, d; - int b;
int *e; - void
fn1 () { - for (; a; a += 1) {
b = 0; - for (; b > -16; --b)
for (; c;) { - int *f = &d;
*f = 0; - } *e = 0;
} - }
C50 : Crashes Sun CC 5.11 at -xO4:
unsigned char a, d; - struct {
int f2 - }
b; - int c, e;
void - fn1 (p1) {
} - void
fn2 () { - c = 0;
for (; c <= 0;) - e = b.f2;
fn1 (0); - b = b;
d = -a; - }
C51 : Crashes Sun CC 5.11 at -fast:
int a, c; - int b[1];
void - fn1 () {
short d; - for (; a; a -= 1) {
d = b1 = b1; - b[0] = 0;
} - }
C52 : Crashes Sun CC 5.11 at -xO4:
int a, b, d; - short c;
int - fn1 (p1) {
return a ? 0 : p1; - }
void - fn2 () {
int e = 0; - for (;;) {
c = 0; - d = fn1 (e ^ ~~c);
d && b; - }
- }
C53 : Crashes Sun CC 5.11 at -fast:
long a; - int b, d;
int *c; - void
fn1 () { - int *e;
for (;; b--) - for (; d;) {
*c = 0; - *c &= (&e != 1) / a;
} - }
C54 : Crashes Sun CC 5.11 at -xO0:
#pragma pack(1) - struct {
int f3:1; - int f4:16
} - a = { 1, 0 };
C55 : Crashes Sun CC 5.11 at -xO3:
int a, c; - static int b = 1;
void fn1 (); - void
fn2 () { - for (; a; a--) {
c = 0; - for (; c != 1;) {
if (b) - break;
fn1 (); - }
} - }
C56 : Crashes Sun CC 5.11 at -xO4:
#pragma pack(1) - struct S0 {
int f1; - int f3:1
} - a;
void - fn1 (struct S0 p1) {
p1.f3 = 0; - }
void - fn2 () {
fn1 (a); - }
C57 : Crashes Sun CC 5.11 at -fast:
int a, c, d, e, f, g, h, i, j, k; - volatile int b;
int - fn1 () {
for (; d; d = a) { - int *l = &c;
c = -3; - for (; c > -23; --c)
if (k) { - if (*l)
continue; - return b;
} - for (; i; ++i) {
j = 0; - g = h;
for (; f <= 1; f += 1) { - }
} - }
return e; - }
|
|