aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver/ToolChains/Flang.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Driver/ToolChains/Flang.cpp')
-rw-r--r--clang/lib/Driver/ToolChains/Flang.cpp18
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;
}