1931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-C %s
2931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: %clang_cc1 -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-C %s
3931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: %clang_cc1 -x c++ -std=c++11 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-CPP0X %s
453afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor
553afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor#include <stddef.h>
659705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber
759705aee3fe01aa6fb6962dd11350161b47983d9Nico Weberint main() {
853afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-C: store i8 97
953afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i8 97
1059705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber  char a = 'a';
1159705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber
127748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  // Should truncate value (equal to last character).
1353afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-C: store i8 98
1453afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i8 98
1559705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber  char b = 'ab';
1659705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber
17e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  // Should get concatenated characters
187748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  // CHECK-C: store i32 24930
197748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  // CHECK-CPP0X: store i32 24930
207748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  int b1 = 'ab';
217748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
22e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  // Should get concatenated characters
237748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  // CHECK-C: store i32 808464432
247748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  // CHECK-CPP0X: store i32 808464432
257748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  int b2 = '0000';
267748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
27e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  // Should get truncated value (last four characters concatenated)
287748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  // CHECK-C: store i32 1919512167
297748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  // CHECK-CPP0X: store i32 1919512167
307748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell  int b3 = 'somesillylongstring';
317748cbc97ff9c6c3940549d30965a10b47a45ee8Seth Cantrell
3253afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-C: store i32 97
3353afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i32 97
3459705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber  wchar_t wa = L'a';
3559705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber
3659705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber  // Should pick second character.
3753afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-C: store i32 98
3853afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i32 98
3959705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber  wchar_t wb = L'ab';
4059705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber
4153afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor#if __cplusplus >= 201103L
4253afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i16 97
435cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor  char16_t ua = u'a';
445cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor
4553afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i32 97
465cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor  char32_t Ua = U'a';
475cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor
48e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  // CHECK-CPP0X: store i16 1047
49e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  char16_t ua1 = u'З';
50e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  // CHECK-CPP0X: store i16 12538
51e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  char16_t ua2 = u'ヺ';
52e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  // CHECK-CPP0X: store i16 -27177
53e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  char16_t ua3 = u'闗';
54e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell
55e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  // CHECK-CPP0X: store i32 181
56e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  char32_t Ua1 = U'µ';
57e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  // CHECK-CPP0X: store i32 38359
58e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  char32_t Ua2 = U'闗';
59e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  // CHECK-CPP0X: store i32 128128
60e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell  char32_t Ua3 = U'��';
61e424844985873dc7cd7b6c8e47d670c0ce34cfdfSeth Cantrell
6253afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor#endif
635cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor
6453afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-C: store i32 61451
6553afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i32 61451
6659705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber  wchar_t wc = L'\uF00B';
6759705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber
6853afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor#if __cplusplus >= 201103L
695cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor  // -4085 == 0xf00b
7053afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i16 -4085
715cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor  char16_t uc = u'\uF00B';
725cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor
7353afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i32 61451
745cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor  char32_t Uc = U'\uF00B';
7553afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor#endif
765cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor
7753afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-C: store i32 1110027
7853afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i32 1110027
7959705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber  wchar_t wd = L'\U0010F00B';
8059705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber
8153afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor#if __cplusplus >= 201103L
8253afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i32 1110027
835cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor  char32_t Ud = U'\U0010F00B';
8453afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor#endif
855cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor
8659705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber  // Should pick second character.
8753afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-C: store i32 1110027
8853afad5ebbfd47e932405af5b93177ea0d68e3f4Douglas Gregor  // CHECK-CPP0X: store i32 1110027
8959705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber  wchar_t we = L'\u1234\U0010F00B';
9059705aee3fe01aa6fb6962dd11350161b47983d9Nico Weber}
91