Home | History | Annotate | Download | only in Lexer
      1 // RUN: %clang_cc1 -fsyntax-only -verify -pedantic -trigraphs %s
      2 
      3 int x = 000000080;  // expected-error {{invalid digit}}
      4 
      5 int y = 0000\
      6 00080;             // expected-error {{invalid digit}}
      7 
      8 
      9 
     10 float X = 1.17549435e-38F;
     11 float Y = 08.123456;
     12 
     13 // PR2252
     14 #if -0x8000000000000000  // should not warn.
     15 #endif
     16 #if -01000000000000000000000  // should not warn.
     17 #endif
     18 #if 9223372036854775808 // expected-warning {{integer constant is larger than the largest signed integer type}}
     19 #endif
     20 #if 0x10000000000000000 // expected-error {{integer constant is larger than the largest unsigned integer type}}
     21 #endif
     22 
     23 int c[] = {
     24   'df',   // expected-warning {{multi-character character constant}}
     25   '\t',
     26   '\\
     27 t',
     28   '??!',  // expected-warning {{trigraph converted to '|' character}}
     29   'abcd'  // expected-warning {{multi-character character constant}}
     30 };
     31 
     32 //  PR4499
     33 int m0 = '0';
     34 int m1 = '\\\''; // expected-warning {{multi-character character constant}}
     35 int m2 = '\\\\'; // expected-warning {{multi-character character constant}}
     36 int m3 = '\\\
     37 ';
     38 
     39 
     40 #pragma clang diagnostic ignored "-Wmultichar"
     41 
     42 int d = 'df'; // no warning.
     43 int e = 'abcd';  // still warn: expected-warning {{multi-character character constant}}
     44 
     45 #pragma clang diagnostic ignored "-Wfour-char-constants"
     46 
     47 int f = 'abcd';  // ignored.
     48 
     49 // rdar://problem/6974641
     50 float t0[] = {
     51   1.9e20f,
     52   1.9e-20f,
     53   1.9e50f,   // expected-warning {{too large}}
     54   1.9e-50f,  // expected-warning {{too small}}
     55   -1.9e20f,
     56   -1.9e-20f,
     57   -1.9e50f,  // expected-warning {{too large}}
     58   -1.9e-50f  // expected-warning {{too small}}
     59 };
     60 double t1[] = {
     61   1.9e50,
     62   1.9e-50,
     63   1.9e500,   // expected-warning {{too large}}
     64   1.9e-500,  // expected-warning {{too small}}
     65   -1.9e50,
     66   -1.9e-50,
     67   -1.9e500,  // expected-warning {{too large}}
     68   -1.9e-500  // expected-warning {{too small}}
     69 };
     70 
     71 // PR7888
     72 double g = 1e100000000; // expected-warning {{too large}}
     73 
     74 char h = '\u1234'; // expected-error {{character too large for enclosing character literal type}}
     75