Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only -Wconversion -verify %s
      2 
      3 #include <stddef.h>
      4 
      5 typedef   signed char  int8_t;
      6 typedef   signed short int16_t;
      7 typedef   signed int   int32_t;
      8 typedef   signed long  int64_t;
      9 
     10 typedef unsigned char  uint8_t;
     11 typedef unsigned short uint16_t;
     12 typedef unsigned int   uint32_t;
     13 typedef unsigned long  uint64_t;
     14 
     15 // <rdar://problem/7909130>
     16 namespace test0 {
     17   int32_t test1_positive(char *I, char *E) {
     18     return (E - I); // expected-warning {{implicit conversion loses integer precision}}
     19   }
     20 
     21   int32_t test1_negative(char *I, char *E) {
     22     return static_cast<int32_t>(E - I);
     23   }
     24 
     25   uint32_t test2_positive(uint64_t x) {
     26     return x; // expected-warning {{implicit conversion loses integer precision}}
     27   }
     28 
     29   uint32_t test2_negative(uint64_t x) {
     30     return (uint32_t) x;
     31   }
     32 }
     33 
     34 namespace test1 {
     35   uint64_t test1(int x, unsigned y) {
     36     return sizeof(x == y);
     37   }
     38 
     39   uint64_t test2(int x, unsigned y) {
     40     return __alignof(x == y);
     41   }
     42 
     43   void * const foo();
     44   bool test2(void *p) {
     45     return p == foo();
     46   }
     47 }
     48 
     49 namespace test2 {
     50   struct A {
     51     unsigned int x : 2;
     52     A() : x(10) {} // expected-warning {{implicit truncation from 'int' to bitfield changes value from 10 to 2}}
     53   };
     54 }
     55 
     56 void test3() {
     57   int a = NULL; // expected-warning {{implicit conversion of NULL constant to integer}}
     58   int b;
     59   b = NULL; // expected-warning {{implicit conversion of NULL constant to integer}}
     60   int c = ((((NULL)))); // expected-warning {{implicit conversion of NULL constant to integer}}
     61   int d;
     62   d = ((((NULL)))); // expected-warning {{implicit conversion of NULL constant to integer}}
     63 }
     64