summaryrefslogtreecommitdiff
path: root/external/bsd/llvm/dist/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorjoerg <joerg@NetBSD.org>2017-12-17 20:58:16 +0000
committerjoerg <joerg@NetBSD.org>2017-12-17 20:58:16 +0000
commit75d829df600f2731f7cce0a0596106946f43b1c3 (patch)
tree1c7c1f04429c94b44d728b977c9dd9cc68cc6779 /external/bsd/llvm/dist/clang/lib/Frontend/CompilerInvocation.cpp
parentce7b676a9a106966585800362e1daf9199b7cafe (diff)
Import clang r319952 from branches/release_50
Diffstat (limited to 'external/bsd/llvm/dist/clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--external/bsd/llvm/dist/clang/lib/Frontend/CompilerInvocation.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/external/bsd/llvm/dist/clang/lib/Frontend/CompilerInvocation.cpp b/external/bsd/llvm/dist/clang/lib/Frontend/CompilerInvocation.cpp
index b2c14554a4b..0d0869c815d 100644
--- a/external/bsd/llvm/dist/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/external/bsd/llvm/dist/clang/lib/Frontend/CompilerInvocation.cpp
@@ -573,6 +573,33 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
if (!Opts.ProfileInstrumentUsePath.empty())
setPGOUseInstrumentor(Opts, Opts.ProfileInstrumentUsePath);
+ if (Arg *A = Args.getLastArg(OPT_fclang_abi_compat_EQ)) {
+ Opts.setClangABICompat(CodeGenOptions::ClangABI::Latest);
+
+ StringRef Ver = A->getValue();
+ std::pair<StringRef, StringRef> VerParts = Ver.split('.');
+ unsigned Major, Minor = 0;
+
+ // Check the version number is valid: either 3.x (0 <= x <= 9) or
+ // y or y.0 (4 <= y <= current version).
+ if (!VerParts.first.startswith("0") &&
+ !VerParts.first.getAsInteger(10, Major) &&
+ 3 <= Major && Major <= CLANG_VERSION_MAJOR &&
+ (Major == 3 ? VerParts.second.size() == 1 &&
+ !VerParts.second.getAsInteger(10, Minor)
+ : VerParts.first.size() == Ver.size() ||
+ VerParts.second == "0")) {
+ // Got a valid version number.
+ if (Major == 3 && Minor <= 8)
+ Opts.setClangABICompat(CodeGenOptions::ClangABI::Ver3_8);
+ else if (Major <= 4)
+ Opts.setClangABICompat(CodeGenOptions::ClangABI::Ver4);
+ } else if (Ver != "latest") {
+ Diags.Report(diag::err_drv_invalid_value)
+ << A->getAsString(Args) << A->getValue();
+ }
+ }
+
Opts.CoverageMapping =
Args.hasFlag(OPT_fcoverage_mapping, OPT_fno_coverage_mapping, false);
Opts.DumpCoverageMapping = Args.hasArg(OPT_dump_coverage_mapping);