diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2017-10-29 06:01:14 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2017-10-29 06:01:14 +0000 |
commit | 8ba8b028796e8802ef469adb442e1f279fce89c6 (patch) | |
tree | 7544fe675c8346d747ec2e62958db4081bf2bde9 /clang/lib/Driver | |
parent | 912f3b8e4b77f910c7cb71df7ecd3caf84a28851 (diff) | |
download | bcm5719-llvm-8ba8b028796e8802ef469adb442e1f279fce89c6.tar.gz bcm5719-llvm-8ba8b028796e8802ef469adb442e1f279fce89c6.zip |
Driver: default to `unsigned int` `wchar_t` for ARM
AAPCS and AAPCS64 mandate that `wchar_t` with `-fno-short-wchar` is an
`unsigned int` rather than a `signed int`. Ensure that the driver does
not flip the signedness of `wchar_t` for those targets.
Add additional tests to ensure that this does not regress.
llvm-svn: 316858
Diffstat (limited to 'clang/lib/Driver')
-rw-r--r-- | clang/lib/Driver/ToolChains/Clang.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index adaf39abc5f..c1c8813cc42 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2622,8 +2622,13 @@ static void RenderCharacterOptions(const ArgList &Args, const llvm::Triple &T, CmdArgs.push_back("-fwchar-type=short"); CmdArgs.push_back("-fno-signed-wchar"); } else { + bool IsARM = T.isARM() || T.isThumb() || T.isAArch64(); CmdArgs.push_back("-fwchar-type=int"); - CmdArgs.push_back("-fsigned-wchar"); + if (IsARM && !(T.isOSWindows() || T.getOS() == llvm::Triple::NetBSD || + T.getOS() == llvm::Triple::OpenBSD)) + CmdArgs.push_back("-fno-signed-wchar"); + else + CmdArgs.push_back("-fsigned-wchar"); } } } |