diff options
Diffstat (limited to 'clang/lib/Driver/ToolChains/Flang.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChains/Flang.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index a539481..426bc52 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -693,6 +693,7 @@ static void addFloatingPointOptions(const Driver &D, const ArgList &Args, bool AssociativeMath = false; bool ReciprocalMath = false; + StringRef LastComplexRangeOption; LangOptions::ComplexRangeKind Range = LangOptions::ComplexRangeKind::CX_None; if (const Arg *A = Args.getLastArg(options::OPT_ffp_contract)) { @@ -720,17 +721,22 @@ static void addFloatingPointOptions(const Driver &D, const ArgList &Args, continue; case options::OPT_fcomplex_arithmetic_EQ: { + LangOptions::ComplexRangeKind NewRange; StringRef Val = A->getValue(); if (Val == "full") - Range = LangOptions::ComplexRangeKind::CX_Full; + NewRange = LangOptions::ComplexRangeKind::CX_Full; else if (Val == "improved") - Range = LangOptions::ComplexRangeKind::CX_Improved; + NewRange = LangOptions::ComplexRangeKind::CX_Improved; else if (Val == "basic") - Range = LangOptions::ComplexRangeKind::CX_Basic; + NewRange = LangOptions::ComplexRangeKind::CX_Basic; else { D.Diag(diag::err_drv_unsupported_option_argument) << A->getSpelling() << Val; + break; } + + setComplexRange(D, Args.MakeArgString(A->getSpelling() + Val), NewRange, + LastComplexRangeOption, Range); break; } case options::OPT_fhonor_infinities: @@ -779,6 +785,9 @@ static void addFloatingPointOptions(const Driver &D, const ArgList &Args, ApproxFunc = true; SignedZeros = false; FPContract = "fast"; + setComplexRange(D, A->getSpelling(), + LangOptions::ComplexRangeKind::CX_Basic, + LastComplexRangeOption, Range); break; case options::OPT_fno_fast_math: HonorINFs = true; @@ -792,6 +801,9 @@ static void addFloatingPointOptions(const Driver &D, const ArgList &Args, // --ffp-contract=off -fno-fast-math --> -ffp-contract=off if (FPContract == "fast") FPContract = ""; + setComplexRange(D, A->getSpelling(), + LangOptions::ComplexRangeKind::CX_None, + LastComplexRangeOption, Range); break; } |