diff options
Diffstat (limited to 'flang/lib/Evaluate/common.cpp')
| -rw-r--r-- | flang/lib/Evaluate/common.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/flang/lib/Evaluate/common.cpp b/flang/lib/Evaluate/common.cpp index ed6a0ef..119ea3c 100644 --- a/flang/lib/Evaluate/common.cpp +++ b/flang/lib/Evaluate/common.cpp @@ -16,25 +16,26 @@ namespace Fortran::evaluate { void FoldingContext::RealFlagWarnings( const RealFlags &flags, const char *operation) { static constexpr auto warning{common::UsageWarning::FoldingException}; + if (!realFlagWarningContext_.empty()) { + // Override 'operation' with a string like + // "compilation-time evaluation of a call to '...'" + operation = realFlagWarningContext_.c_str(); + } if (flags.test(RealFlag::Overflow)) { - Warn(warning, "overflow on %s%s"_warn_en_US, operation, - realFlagWarningContext_); + Warn(warning, "overflow on %s"_warn_en_US, operation); } if (flags.test(RealFlag::DivideByZero)) { if (std::strcmp(operation, "division") == 0) { - Warn(warning, "division by zero%s"_warn_en_US, realFlagWarningContext_); + Warn(warning, "division by zero"_warn_en_US); } else { - Warn(warning, "division by zero on %s%s"_warn_en_US, operation, - realFlagWarningContext_); + Warn(warning, "division by zero on %s"_warn_en_US, operation); } } if (flags.test(RealFlag::InvalidArgument)) { - Warn(warning, "invalid argument on %s%s"_warn_en_US, operation, - realFlagWarningContext_); + Warn(warning, "invalid argument on %s"_warn_en_US, operation); } if (flags.test(RealFlag::Underflow)) { - Warn(warning, "underflow on %s%s"_warn_en_US, operation, - realFlagWarningContext_); + Warn(warning, "underflow on %s"_warn_en_US, operation); } } |
