57个让C编译器崩溃的代码

开发 后端
本文列出 57 段代码以及相应的编译器版本和编译参数,在这个环境下对代码进行编译会导致编译器崩溃。

我不清楚你是否很高兴看到你的程序会让编译器崩溃的情况,反正我很喜欢,相当于发现了编译器的 bug。

本文列出 57 段代码以及相应的编译器版本和编译参数,在这个环境下对代码进行编译会导致编译器崩溃。

C1 : Crashes Clang 2.6 at -O0:

  1. #pragma pack(1)  
  2. struct S1 {  
  3.   int f0;  
  4.   char f2  
  5. };  
  6. struct {  
  7.   struct S1 f0  
  8.     }  
  9. a[] = { 0 }  
  10.       ; 

C2 : Crashes Clang 2.6 at -O2:

  1. struct S0 {  
  2.   int f0:1;  
  3.   int f4  
  4. }  
  5. a;  
  6. void 
  7. fn1 () {  
  8.   struct S0 b[][1][1] = { 0 };  
  9.   b[0][0][0] = a;  

C3 : Crashes Clang 2.6 at -O2:

  1. unsigned short a;  
  2. int b;  
  3. char c;  
  4. short 
  5. fn1 () {  
  6.   return 1 / a;  
  7. }  
  8. void 
  9. fn2 () {  
  10.   b = fn1 ();  
  11.   char d = b;  
  12.   c = d % 3;  

C4 : Crashes Clang 2.6 at -O3:

  1. int a, b, c, d, e;  
  2. #pragma pack(1)  
  3. struct S0 {  
  4.   int f0:14;  
  5.   int f1:13;  
  6.   int f2:28;  
  7.   int f3:23;  
  8.   int f4:12  
  9. };  
  10. void fn1 (struct S0);  
  11. void 
  12. fn2 () {  
  13.   int f;  
  14. lbl_2311:  
  15.   ;  
  16.   struct S0 g = { 0, 0, 1 };  
  17.   fn1 (g);  
  18.   b && e;  
  19.   for (; c;) {  
  20.     if (d)  
  21.       goto lbl_2311;  
  22.     f = a && 1 ? 0 : 1;  
  23.     g.f4 = f;  
  24.   }  

C5 : Crashes Clang 2.6 at -O2:

  1.  int crc32_context, g_2 = 0, g_5;  
  2. int g_8;  
  3. int *g_39, *g_371;  
  4. int g_81;  
  5. int func_1_l_15 ;  
  6. static short safe_add_func_int16_t_s_s ( short si1, int si2 ) {  
  7.     return si1 > 67 ? si1 : si1 + si2;  
  8.   }  
  9.  
  10.     static int func_1 (  ) {  
  11.     int l_462 = 0;  
  12.     g_2 = 0;  
  13.     for ( ;  
  14.   g_2 < 12;  
  15.   g_2 = safe_add_func_int16_t_s_s ( g_2, 5 ) )     {  
  16.        g_5 = 1;  
  17.        for ( ;  
  18.  g_5;  
  19.  ++g_5 )    {  
  20.       g_8 = 1;  
  21.       for ( ;  
  22.  g_8 >= 0;  
  23.  g_8 = g_8 - 1 )        {  
  24.           func_1_l_15 = 1;  
  25.           for ( ;  
  26.  func_1_l_15;  
  27.             func_1_l_15 =   func_1_l_15  - 1  )         if ( g_8 )        break;  
  28.         }  
  29.       g_371 = &l_462;  
  30.       int *l_128 = &g_81;  
  31.       *l_128 = *g_39;  
  32.     }  
  33.  *g_371 =    0 != 0   ;  
  34.      }  
  35.     return 0;  
  36.   }  
  37.    int main (  ) {  
  38.     func_1 (  );  
  39.     crc32_context = g_2;  
  40.     crc32_context += g_5;  
  41.   }  
  42.    

C6 : Crashes Clang 2.6 at -O0:

  1. #pragma pack(1)  
  2. struct S2 {  
  3.   int f1;  
  4.   short f4  
  5. };  
  6. struct S3 {  
  7.   struct S2 f1;  
  8.   int f3:14  
  9. };  
  10. struct {  
  11.   struct S3 f3  
  12.     }  
  13. a = { 0, 0, 0 }; 

C7 : Crashes Clang 2.6 at -O1:

  1. int *a;  
  2. static int **b;  
  3. int c, d, e;  
  4. void 
  5. fn1 () {  
  6.   d = &b == c;  
  7.   for (;;) {  
  8.     int **f = &a;  
  9.     if (e) {  
  10.     } else 
  11.       b = f;  
  12.     if (**b)  
  13.       continue;  
  14.     **f;  
  15.   }  

C8 : Crashes Clang 2.6 at -O1:

  1. #pragma pack(1)  
  2. struct S0 {  
  3.   int f3;  
  4.   char f4  
  5. };  
  6. struct {  
  7.   struct S0 f6;  
  8.   int f8  
  9. }  
  10. a = { 0, 0, 0 }; 

C9 : Crashes Clang 2.6 at -O2:

  1. struct S0 {  
  2.   int f0;  
  3.   int f1;  
  4.   short f3;  
  5.   int f7;  
  6.   int f8  
  7. }  
  8. b;  
  9. int a, c, d, e, f;  
  10. void 
  11. fn1 (struct S0 p1) {  
  12.   d++;  
  13.   c = p1.f8;  
  14.   e = 0;  
  15.   a = p1.f7;  
  16. }  
  17. void 
  18. fn2 () {  
  19.   e = 0;  
  20.   for (; e; e++) {  
  21.     if (d)  
  22.       for (;;) {  
  23.       }  
  24.     --f;  
  25.   }  
  26.   fn1 (b);  

C10 : Crashes Clang 2.6 at -O1:

  1. union U2 {  
  2.   int f0;  
  3.   unsigned short f2  
  4. }  
  5. b;  
  6. static int a = 1;  
  7. void 
  8. fn1 (int p1, unsigned short p2) {  
  9. }  
  10. int fn2 (union U2);  
  11. union U2 fn3 ();  
  12. static unsigned long long 
  13. fn5 () {  
  14.   fn1 (b.f2, b.f0);  
  15.   return 0;  
  16. }  
  17. static char 
  18. fn4 () {  
  19.   fn5 ();  
  20.   return 0;  
  21. }  
  22. int 
  23. main () {  
  24.   a || fn2 (fn3 (fn4 () ) );  

C11 : Crashes Clang 2.7 at -O1:

  1. int *a;  
  2. static int **b;  
  3. int c, d, e;  
  4. void 
  5. fn1 () {  
  6.   d = &b == c;  
  7.   for (;;) {  
  8.     int **f = &a;  
  9.     if (e) {  
  10.     } else 
  11.       b = f;  
  12.     if (**b)  
  13.       continue;  
  14.     **f;  
  15.   }  

C12 : Crashes Clang 2.7 at -O0:

  1. char a;  
  2. unsigned char b;  
  3. int c;  
  4. void 
  5. fn1 () {  
  6.   (b ^= c) != a;  

C13 : Crashes Clang 2.7 at -O2:

  1. int a, b;  
  2. void fn1 ();  
  3. void 
  4. fn2 (short p1) {  
  5.   short c;  
  6.   c = (65532 | 3) + p1;  
  7.   fn1 (c && 1);  
  8.   b = (0 == p1) * a;  

C14 : Crashes GCC 3.2.0 at -O1:

  1. void 
  2. fn1 () {  
  3.   struct S0 *a;  
  4.   struct S0 *b, *c = &a;  
  5.   struct S0 **d = &c;  
  6.   if (&b == &a) {  
  7.   }  

C15 : Crashes GCC 3.2.0 at -O3:

  1. volatile int a, b, c, i;  
  2. char d;  
  3. void 
  4. fn1 () {  
  5.   int e;  
  6.   {  
  7.     for (;; c++) {  
  8.       int f[50] = { };  
  9.       if (b) {  
  10.         {  
  11.           0;  
  12.           {  
  13.             {  
  14.               int g = a, h = d;  
  15.               e = h ? g : g / 0;  
  16.             }  
  17.           }  
  18.           a = e;  
  19.         }  
  20.       }  
  21.     }  
  22.   }  
  23. }  
  24. void 
  25. main () {  
  26.   i = 0 / 0;  
  27.   a;  

C16 : Crashes GCC 3.2.0 at -O3:

  1. int a, c;  
  2. volatile int b;  
  3. void 
  4. fn1 () {  
  5.   b;  
  6.   for (;;)  
  7.     break;  
  8.   int d = b, e = a;  
  9.   c = a ? d : d % 0;  
  10. }  
  11. void 
  12. fn2 () {  
  13.   if (0 % 0)  
  14.     b;  

C17 : Crashes GCC 3.2.0 at -O2:

  1. union U1 {  
  2.   int f0;  
  3.   char f1  
  4. };  
  5. void 
  6. fn1 (union U1 p1) {  
  7.   p1.f1 = 0;  
  8.   for (; p1.f1;) {  
  9.   }  

C18 : Crashes GCC 3.2.0 at -O1:

  1. int a, b;  
  2. void 
  3. fn1 () {  
  4.   b = 4294967290UL <= a | b;  

C19 : Crashes GCC 3.2.0 at -O3:

  1. int a, b, c;  
  2. int 
  3. fn1 (int p1, int p2) {  
  4.   return p1 - p2;  
  5. }  
  6. void 
  7. fn2 () {  
  8.   int d;  
  9.   int **e;  
  10.   int ***f = &e;  
  11.   d = a && b ? a : a % 0;  
  12.   if (fn1 (f == 0, 2) )  
  13.     c = ***f;  

C20 : Crashes GCC 3.3.0 at -O3:

  1. int a, b, d;  
  2. struct S0 {  
  3.   int f3  
  4. };  
  5. int *volatile c;  
  6. void fn1 (struct S0);  
  7. void 
  8. fn2 () {  
  9.   int e;  
  10.   struct S0 **f;  
  11.   struct S0 ***g = &f;  
  12.   (a && b && b ? 0 : b) > (&c && 0);  
  13.   e = 0 == g;  
  14.   d = e >> 1;  
  15.   for (;;)  
  16.     fn1 (***g);  

C21 : Crashes GCC 3.4.0 at -O3:

  1. int a, b;  
  2. struct U0 {  
  3.   char f0;  
  4.   int f2  
  5. };  
  6. void 
  7. fn1 () {  
  8.   struct U0 c;  
  9.   for (; c.f0 != 1; c.f0 = c.f0 + a)  
  10.     b -= 1;  

C22 : Crashes GCC 3.4.0 at -O3:

  1. int a, b, d, e;  
  2. struct S0 {  
  3.   int f3  
  4. };  
  5. int *c;  
  6. void fn1 (struct S0);  
  7. void 
  8. fn2 () {  
  9.   struct S0 **f;  
  10.   struct S0 ***g = &f;  
  11.   (a && b && b ? 0 : b) > (&c == d);  
  12.   e = 1 < (0 == g);  
  13.   for (;;)  
  14.     fn1 (***g);  

C23 : Crashes GCC 4.0.0 at -O2:

  1. int ***a;  
  2. int b;  
  3. int *c;  
  4. void 
  5. main () {  
  6.   if (&c == a)  
  7.     b = 0 == *a;  

C24 : Crashes GCC 4.0.0 at -O2:

  1. int a[][0];  
  2. int *const b = &a[0][1];  
  3. int 
  4. fn1 () {  
  5.   return *b;  

C25 : Crashes GCC 4.0.0 at -O0:

  1. int a, b;  
  2. unsigned char c;  
  3. void 
  4. fn1 () {  
  5.   (0 >= a & (0 || b) ) > c;  

C26 : Crashes GCC 4.0.0 at -O1:

  1. struct {  
  2.   int f9:1  
  3. }  
  4. a;  
  5. const int b[] = { 0 };  
  6. void fn1 ();  
  7. void 
  8. main () {  
  9.   for (;;) {  
  10.     a.f9 = b[0];  
  11.     fn1 ();  
  12.   }  

C27 : Crashes GCC 4.0.0 at -O0:

  1. int a, c;  
  2. unsigned char b;  
  3. void 
  4. fn1 () {  
  5.   b > (c > 0 & 0 < a);  

C28 : Crashes GCC 4.0.0 at -O2:

  1. int **a[][0];  
  2. static int ***const b = &a[0][1];  
  3. void fn1 ();  
  4. int 
  5. fn2 () {  
  6.   return ***b;  
  7.   fn1 ();  
  8. }  
  9. void 
  10. fn1 () {  
  11.   **b;  

C29 : Crashes GCC 4.1.0 at -O1:

  1. volatile int ***a;  
  2. int b;  
  3. int **c;  
  4. void 
  5. fn1 () {  
  6.   if (&c == a)  
  7.     b = 0 == *a;  

C30 : Crashes GCC 4.1.0 at -O1:

  1. struct {  
  2.   int f0;  
  3.   int f2  
  4. }  
  5. a;  
  6. int b;  
  7. void 
  8. fn1 () {  
  9.   a.f2 = 0;  
  10.   int *c[] = { 0, 0, 0, 0, &a.f0, 0, 0, 0, &a.f0 };  
  11.   b = *c[4];  

C31 : Crashes GCC 4.1.0 at -O2:

  1. int a, b;  
  2. unsigned c;  
  3. void 
  4. fn1 () {  
  5.   for (; c <= 0;)  
  6.     if (b < c)  
  7.       a = 1 && c;  

C32 : Crashes GCC 4.1.0 at -O1:

  1. unsigned a;  
  2. int b;  
  3. void 
  4. main () {  
  5.   unsigned c = 4294967295;  
  6.   int d = c;  
  7.   b = a <= d || a;  

C33 : Crashes GCC 4.1.0 at -O1:

  1. const volatile long a;  
  2. void 
  3. main () {  
  4.   printf ("%d\n", (int) a);  

C34 : Crashes GCC 4.1.0 at -O3:

  1. int a, b;  
  2. union U1 {  
  3.   int f0;  
  4.   int f1  
  5. };  
  6. void 
  7. fn1 () {  
  8.   union U1 c = { 1 };  
  9.   int d = 1;  
  10.   if ( (c.f1 & a ? c.f1 : 1 - a) ^ d) {  
  11.   } else 
  12.     b = 0;  

C35 : Crashes GCC 4.2.0 at -O1:

  1. volatile int ***a;  
  2. int b;  
  3. int **c;  
  4. void 
  5. fn1 () {  
  6.   if (&c == a)  
  7.     b = 0 == *a;  

C36 : Crashes GCC 4.2.0 at -O1:

  1. struct S2 {  
  2.   volatile int f5:1;  
  3.   int f6  
  4. };  
  5. static struct S2 a;  
  6. void 
  7. main () {  
  8.   printf ("%d\n", a.f5);  

C37 : Crashes GCC 4.3.0 at -O1:

  1. long long *a;  
  2. int b;  
  3. void 
  4. fn1 () {  
  5.   long long **c = &a;  
  6.   int d = 7;  
  7. lbl_2890: {  
  8.     long long **e = &a;  
  9.     b = (e == c) < d;  
  10.     d = 0;  
  11.     goto lbl_2890;  
  12.   }  

C38 : Crashes GCC 4.3.0 at -O2:

  1. struct S2 {  
  2.   volatile int f5:1;  
  3.   int f6  
  4. };  
  5. static struct S2 a;  
  6. void 
  7. main () {  
  8.   printf ("%d\n", a.f5);  

C39 : Crashes GCC 4.3.0 at -O3:

  1. int a;  
  2. short b;  
  3. void 
  4. fn1 () {  
  5.   int c[0];  
  6.   for (;;) {  
  7.     a = c[0];  
  8.     b = 0;  
  9.     for (; b < 7; b += 1)  
  10.       c[b] = 0;  
  11.   }  

C40 : Crashes GCC 4.3.0 at -O1:

  1. volatile int **a;  
  2. int *b;  
  3. void 
  4. fn1 () {  
  5.   if (a == &b)  
  6.     **a;  

C41 : Crashes GCC 4.3.0 at -O3:

  1. int a, b, c, d, e, f;  
  2. void 
  3. fn1 () {  
  4.   char g;  
  5. lbl_120:  
  6.   if (b || e >= 0 & d >= 0 || a)  
  7.     return;  
  8.   g = f < 0 ? 1 : f;  
  9.   d = g == 0 || (char) f == 0 && g == 1 ? 0 : 0 % 0;  
  10.   if (c)  
  11.     goto lbl_120;  

C42 : Crashes Intel CC 12.0.5 at -O1:

  1. struct U0 {  
  2.   int f0  
  3. }  
  4. a;  
  5. struct U0  
  6. fn1 () {  
  7.   return a;  
  8. }  
  9. void 
  10. main () {  
  11.   0 > a.f0;  
  12.   fn1 ();  

C43 : Crashes Open64 4.2.4 at -O3:

  1. int a;  
  2. int *b;  
  3. unsigned c;  
  4. void 
  5. fn1 () {  
  6.   for (; a; a--)  
  7.     if (*b) {  
  8.       c = 0;  
  9.       for (; c >= 5; c++) {  
  10.       }  
  11.     }  

C44 : Crashes Open64 4.2.4 at -O3:

  1. short a;  
  2. void 
  3. fn1 () {  
  4.   long b;  
  5.   b = 44067713550;  
  6.   a |= b;  

C45 : Crashes Open64 4.2.4 at -O3:

  1. volatile int a;  
  2. void 
  3. fn1 () {  
  4.   int b = 1;  
  5.   a || b--;  

C46 : Crashes Open64 4.2.4 at -O2:

  1. int a, b;  
  2. void fn1 ();  
  3. void fn2 ();  
  4. void 
  5. fn3 () {  
  6.   fn2 ();  
  7.   fn1 ();  
  8. }  
  9. void 
  10. fn2 () {  
  11.   if (1) {  
  12.   } else 
  13.     for (;; b++) {  
  14.       int c = 0;  
  15.       int *d = &a;  
  16.       int **e = &d;  
  17.       *e = &c;  
  18.       *d = 0;  
  19.       *d |= 0;  
  20.     }  

C47 : Crashes Open64 4.2.4 at -O3:

  1. struct S0 {  
  2.   int f1:1  
  3. };  
  4. int a, b;  
  5. void 
  6. fn1 () {  
  7.   for (; b;) {  
  8.     struct S0 c = { };  
  9.     if (1) {  
  10.       c = c;  
  11.       a = c.f1;  
  12.     }  
  13.   }  

C48 : Crashes Open64 4.2.4 at -O3:

  1. int a, b;  
  2. int 
  3. fn1 () {  
  4.   int *c = &b;  
  5.   a = 0;  
  6.   for (; a >= -26; --a) {  
  7.     unsigned d = 18446744073709551615;  
  8.     int *e = &b;  
  9.     *e &= d;  
  10.   }  
  11.   return *c;  

C49 : Crashes Open64 4.2.4 at -O3:

  1. static int a, c, d;  
  2. int b;  
  3. int *e;  
  4. void 
  5. fn1 () {  
  6.   for (; a; a += 1) {  
  7.     b = 0;  
  8.     for (; b > -16; --b)  
  9.       for (; c;) {  
  10.         int *f = &d;  
  11.         *f = 0;  
  12.       } *e = 0;  
  13.   }  

C50 : Crashes Sun CC 5.11 at -xO4:

  1. unsigned char a, d;  
  2. struct {  
  3.   int f2  
  4. }  
  5. b;  
  6. int c, e;  
  7. void 
  8. fn1 (p1) {  
  9. }  
  10. void 
  11. fn2 () {  
  12.   c = 0;  
  13.   for (; c <= 0;)  
  14.     e = b.f2;  
  15.   fn1 (0);  
  16.   b = b;  
  17.   d = -a;  

C51 : Crashes Sun CC 5.11 at -fast:

  1. int a, c;  
  2. int b[1];  
  3. void 
  4. fn1 () {  
  5.   short d;  
  6.   for (; a; a -= 1) {  
  7.     d = b1 = b1;  
  8.     b[0] = 0;  
  9.   }  

C52 : Crashes Sun CC 5.11 at -xO4:

  1. int a, b, d;  
  2. short c;  
  3. int 
  4. fn1 (p1) {  
  5.   return a ? 0 : p1;  
  6. }  
  7. void 
  8. fn2 () {  
  9.   int e = 0;  
  10.   for (;;) {  
  11.     c = 0;  
  12.     d = fn1 (e ^ ~~c);  
  13.     d && b;  
  14.   }  

C53 : Crashes Sun CC 5.11 at -fast:

  1. long a;  
  2. int b, d;  
  3. int *c;  
  4. void 
  5. fn1 () {  
  6.   int *e;  
  7.   for (;; b--)  
  8.     for (; d;) {  
  9.       *c = 0;  
  10.       *c &= (&e != 1) / a;  
  11.     }  

C54 : Crashes Sun CC 5.11 at -xO0:

  1. #pragma pack(1)  
  2. struct {  
  3.   int f3:1;  
  4.   int f4:16  
  5. }  
  6. a = { 1, 0 }; 

C55 : Crashes Sun CC 5.11 at -xO3:

  1. int a, c;  
  2. static int b = 1;  
  3. void fn1 ();  
  4. void 
  5. fn2 () {  
  6.   for (; a; a--) {  
  7.     c = 0;  
  8.     for (; c != 1;) {  
  9.       if (b)  
  10.         break;  
  11.       fn1 ();  
  12.     }  
  13.   }  

C56 : Crashes Sun CC 5.11 at -xO4:

  1. #pragma pack(1)  
  2. struct S0 {  
  3.   int f1;  
  4.   int f3:1  
  5. }  
  6. a;  
  7. void 
  8. fn1 (struct S0 p1) {  
  9.   p1.f3 = 0;  
  10. }  
  11. void 
  12. fn2 () {  
  13.   fn1 (a);  

C57 : Crashes Sun CC 5.11 at -fast:

  1. int a, c, d, e, f, g, h, i, j, k;  
  2. volatile int b;  
  3. int 
  4. fn1 () {  
  5.   for (; d; d = a) {  
  6.     int *l = &c;  
  7.     c = -3;  
  8.     for (; c > -23; --c)  
  9.       if (k) {  
  10.         if (*l)  
  11.           continue;  
  12.         return b;  
  13.       }  
  14.     for (; i; ++i) {  
  15.       j = 0;  
  16.       g = h;  
  17.       for (; f <= 1; f += 1) {  
  18.       }  
  19.     }  
  20.   }  
  21.   return e;  

英文:http://blog.regehr.org/archives/696

原文链接:http://www.oschina.net/question/12_46847

【编辑推荐】

  1. 详解Objective-C 与 C++区别之分
  2. 浅谈Objective-C协议和委托
  3. 浅谈Objective-C代理方案
  4. 浅谈Objective-C编码规范
  5. 详解Objective-C中变量和数据类型
责任编辑:林师授 来源: OSCHINA
相关推荐

2022-08-02 08:11:41

监控埋点埋点方式插桩

2023-11-15 17:58:58

C++代码

2010-10-20 13:43:37

C++编译器

2009-08-10 17:12:54

C#编译器

2010-01-18 10:34:21

C++编译器

2010-01-21 09:11:38

C++编译器

2010-01-12 16:42:59

C++编译器

2009-08-06 14:59:36

C#编译器

2010-01-18 10:28:15

C++编译器

2013-12-10 10:53:47

shellcode

2009-08-14 11:34:26

Mono C#编译器

2009-09-01 10:35:19

C# 3.0编译器

2010-02-03 13:14:03

C++编译器命令

2010-01-14 15:29:44

C++编译器

2009-08-14 16:37:02

C# NGWS run

2010-06-04 17:37:45

Linux编程工具

2016-11-08 18:53:08

编译器

2010-01-21 09:26:53

CC++编译器

2010-01-08 16:00:46

C++编译器

2020-01-10 18:04:01

Python编程语言Windows
点赞
收藏

51CTO技术栈公众号