Home | History | Annotate | Download | only in Sema
      1 // RUN: %clang_cc1 -std=c11 -fsyntax-only -triple x86_64-pc-linux -verify %s
      2 
      3 // Note: these match the types specified by the target above.
      4 typedef int wchar_t;
      5 typedef unsigned short char16_t;
      6 typedef unsigned int char32_t;
      7 
      8 void f() {
      9   char a1[] = "a"; // No error.
     10   char a2[] = u8"a"; // No error.
     11   char a3[] = u"a"; // expected-error{{initializing char array with wide string literal}}
     12   char a4[] = U"a"; // expected-error{{initializing char array with wide string literal}}
     13   char a5[] = L"a"; // expected-error{{initializing char array with wide string literal}}
     14 
     15   wchar_t b1[] = "a"; // expected-error{{initializing wide char array with non-wide string literal}}
     16   wchar_t b2[] = u8"a"; // expected-error{{initializing wide char array with non-wide string literal}}
     17   wchar_t b3[] = u"a"; // expected-error{{initializing wide char array with incompatible wide string literal}}
     18   wchar_t b4[] = U"a"; // expected-error{{initializing wide char array with incompatible wide string literal}}
     19   wchar_t b5[] = L"a"; // No error.
     20 
     21   char16_t c1[] = "a"; // expected-error{{initializing wide char array with non-wide string literal}}
     22   char16_t c2[] = u8"a"; // expected-error{{initializing wide char array with non-wide string literal}}
     23   char16_t c3[] = u"a"; // No error.
     24   char16_t c4[] = U"a"; // expected-error{{initializing wide char array with incompatible wide string literal}}
     25   char16_t c5[] = L"a"; // expected-error{{initializing wide char array with incompatible wide string literal}}
     26 
     27   char32_t d1[] = "a"; // expected-error{{initializing wide char array with non-wide string literal}}
     28   char32_t d2[] = u8"a"; // expected-error{{initializing wide char array with non-wide string literal}}
     29   char32_t d3[] = u"a"; // expected-error{{initializing wide char array with incompatible wide string literal}}
     30   char32_t d4[] = U"a"; // No error.
     31   char32_t d5[] = L"a"; // expected-error{{initializing wide char array with incompatible wide string literal}}
     32 
     33   int e1[] = "a"; // expected-error{{initializing wide char array with non-wide string literal}}
     34   int e2[] = u8"a"; // expected-error{{initializing wide char array with non-wide string literal}}
     35   int e3[] = u"a"; // expected-error{{initializing wide char array with incompatible wide string literal}}
     36   int e4[] = U"a"; // expected-error{{initializing wide char array with incompatible wide string literal}}
     37   int e5[] = L"a"; // No error.
     38 
     39   long f1[] = "a"; // expected-error{{array initializer must be an initializer list}}
     40   long f2[] = u8"a"; // expected-error{{array initializer must be an initializer list}}}
     41   long f3[] = u"a"; // expected-error{{array initializer must be an initializer list}}
     42   long f4[] = U"a"; // expected-error{{array initializer must be an initializer list}}
     43   long f5[] = L"a"; // expected-error{{array initializer must be an initializer list}}
     44 }
     45 
     46 void g() {
     47   char a[] = 1; // expected-error{{array initializer must be an initializer list or string literal}}
     48   wchar_t b[] = 1; // expected-error{{array initializer must be an initializer list or wide string literal}}
     49   char16_t c[] = 1; // expected-error{{array initializer must be an initializer list or wide string literal}}
     50   char32_t d[] = 1; // expected-error{{array initializer must be an initializer list or wide string literal}}
     51 }
     52