17748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell// RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++11 -Wfour-char-constants -fsyntax-only -verify %s
20093e12513c5c896434915d5e9126f51b780aa61Richard Smith// RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c11 -x c -Wfour-char-constants -fsyntax-only -verify %s
30093e12513c5c896434915d5e9126f51b780aa61Richard Smith
40093e12513c5c896434915d5e9126f51b780aa61Richard Smith#ifndef __cplusplus
50093e12513c5c896434915d5e9126f51b780aa61Richard Smithtypedef __WCHAR_TYPE__ wchar_t;
60093e12513c5c896434915d5e9126f51b780aa61Richard Smithtypedef __CHAR16_TYPE__ char16_t;
70093e12513c5c896434915d5e9126f51b780aa61Richard Smithtypedef __CHAR32_TYPE__ char32_t;
80093e12513c5c896434915d5e9126f51b780aa61Richard Smith#endif
97748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
107748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellint a = 'ab'; // expected-warning {{multi-character character constant}}
117748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellint b = '\xFF\xFF'; // expected-warning {{multi-character character constant}}
127748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellint c = 'APPS'; // expected-warning {{multi-character character constant}}
137748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
147748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellchar d = '⌘'; // expected-error {{character too large for enclosing character literal type}}
157748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellchar e = '\u2318'; // expected-error {{character too large for enclosing character literal type}}
167748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
170093e12513c5c896434915d5e9126f51b780aa61Richard Smith#ifdef __cplusplus
187748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellauto f = '\xE2\x8C\x98'; // expected-warning {{multi-character character constant}}
190093e12513c5c896434915d5e9126f51b780aa61Richard Smith#endif
207748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
217748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellchar16_t g = u'ab'; // expected-error {{Unicode character literals may not contain multiple characters}}
227748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellchar16_t h = u'\U0010FFFD'; // expected-error {{character too large for enclosing character literal type}}
237748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
247748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellwchar_t i = L'ab'; // expected-warning {{extraneous characters in character constant ignored}}
257748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellwchar_t j = L'\U0010FFFD';
267748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
277748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellchar32_t k = U'\U0010FFFD';
287748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
297748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellchar l = 'Ø'; // expected-error {{character too large for enclosing character literal type}}
307748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellchar m = '��'; // expected-error {{character too large for enclosing character literal type}}
317748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
327748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellchar32_t n = U'ab'; // expected-error {{Unicode character literals may not contain multiple characters}}
337748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrellchar16_t o = '��'; // expected-error {{character too large for enclosing character literal type}}
3459b26d84b64510158e23d80eba077b844b7e0b04Richard Smith
3559b26d84b64510158e23d80eba077b844b7e0b04Richard Smithchar16_t p[2] = u"\U0000FFFF";
360093e12513c5c896434915d5e9126f51b780aa61Richard Smithchar16_t q[2] = u"\U00010000";
370093e12513c5c896434915d5e9126f51b780aa61Richard Smith#ifdef __cplusplus
380093e12513c5c896434915d5e9126f51b780aa61Richard Smith// expected-error@-2 {{too long}}
390093e12513c5c896434915d5e9126f51b780aa61Richard Smith#endif
40