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