зеркало из https://github.com/microsoft/clang-1.git
Fix char literal types in C
L'x' is actually wchar_t support C11 u and U char literals git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148390 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
be77352623
Коммит
79f0a8262b
|
@ -2569,16 +2569,14 @@ ExprResult Sema::ActOnCharacterConstant(const Token &Tok) {
|
|||
return ExprError();
|
||||
|
||||
QualType Ty;
|
||||
if (!getLangOptions().CPlusPlus)
|
||||
Ty = Context.IntTy; // 'x' and L'x' -> int in C.
|
||||
else if (Literal.isWide())
|
||||
Ty = Context.WCharTy; // L'x' -> wchar_t in C++.
|
||||
if (Literal.isWide())
|
||||
Ty = Context.WCharTy; // L'x' -> wchar_t in C and C++.
|
||||
else if (Literal.isUTF16())
|
||||
Ty = Context.Char16Ty; // u'x' -> char16_t in C++0x.
|
||||
Ty = Context.Char16Ty; // u'x' -> char16_t in C11 and C++11.
|
||||
else if (Literal.isUTF32())
|
||||
Ty = Context.Char32Ty; // U'x' -> char32_t in C++0x.
|
||||
else if (Literal.isMultiChar())
|
||||
Ty = Context.IntTy; // 'wxyz' -> int in C++.
|
||||
Ty = Context.Char32Ty; // U'x' -> char32_t in C11 and C++11.
|
||||
else if (!getLangOptions().CPlusPlus || Literal.isMultiChar())
|
||||
Ty = Context.IntTy; // 'x' -> int in C, 'wxyz' -> int in C++.
|
||||
else
|
||||
Ty = Context.CharTy; // 'x' -> char in C++
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче