summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2017-10-29 06:01:14 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2017-10-29 06:01:14 +0000
commit8ba8b028796e8802ef469adb442e1f279fce89c6 (patch)
tree7544fe675c8346d747ec2e62958db4081bf2bde9 /clang/lib/Driver
parent912f3b8e4b77f910c7cb71df7ecd3caf84a28851 (diff)
downloadbcm5719-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.cpp7
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");
}
}
}
OpenPOWER on IntegriCloud