diff options
| author | joerg <joerg@NetBSD.org> | 2017-12-17 20:58:16 +0000 |
|---|---|---|
| committer | joerg <joerg@NetBSD.org> | 2017-12-17 20:58:16 +0000 |
| commit | 75d829df600f2731f7cce0a0596106946f43b1c3 (patch) | |
| tree | 1c7c1f04429c94b44d728b977c9dd9cc68cc6779 /external/bsd/llvm/dist/clang/lib/Frontend/CompilerInvocation.cpp | |
| parent | ce7b676a9a106966585800362e1daf9199b7cafe (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.cpp | 27 |
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); |
