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

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

我们提供的服务有:成都网站制作、网站建设、微信公众号开发、网站优化、网站认证、井陉ssl等。为近千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的井陉网站制作公司

本文列出 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;
  10. }

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

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.   }
  25. }

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

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.   }
  16. }

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);
  27. }

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 () ) );
  25. }

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.   }
  16. }

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

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

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.   }
  8. }

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

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

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.   }
  10. }

C18 : Crashes GCC 3.2.0 at -O1:

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

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

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);
  17. }

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

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);
  15. }

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

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

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

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.   }
  13. }

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);
  6. }

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

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

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];
  12. }

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

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

C33 : Crashes GCC 4.1.0 at -O1:

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

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

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

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);
  9. }

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.   }
  13. }

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);
  9. }

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.   }
  12. }

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

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

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 ();
  13. }

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.     }
  12. }

C44 : Crashes Open64 4.2.4 at -O3:

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

C45 : Crashes Open64 4.2.4 at -O3:

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

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.     }
  21. }

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.   }
  14. }

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

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.   }
  14. }

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

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.   }
  10. }

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.   }
  15. }

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.     }
  12. }

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.   }
  14. }

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);
  14. }

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

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

当前标题:57个让C编译器崩溃的代码
标题来源:http://www.shufengxianlan.com/qtweb/news31/262231.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联