[flang-commits] [flang] a53967c - [flang] Distinguish usage and portability warning messages
Peter Klausler via flang-commits
flang-commits at lists.llvm.org
Tue Mar 8 17:25:01 PST 2022
Author: Peter Klausler
Date: 2022-03-08T17:24:52-08:00
New Revision: a53967cd553cd59452a48aa8651014cd8ed0342e
URL: https://github.com/llvm/llvm-project/commit/a53967cd553cd59452a48aa8651014cd8ed0342e
DIFF: https://github.com/llvm/llvm-project/commit/a53967cd553cd59452a48aa8651014cd8ed0342e.diff
LOG: [flang] Distinguish usage and portability warning messages
Using recently established message severity codes, upgrade
non-fatal messages to usage and portability warnings as
appropriate.
Differential Revision: https://reviews.llvm.org/D121246
Added:
Modified:
flang/lib/Evaluate/check-expression.cpp
flang/lib/Evaluate/common.cpp
flang/lib/Evaluate/fold-complex.cpp
flang/lib/Evaluate/fold-implementation.h
flang/lib/Evaluate/fold-integer.cpp
flang/lib/Evaluate/fold-real.cpp
flang/lib/Evaluate/fold-reduction.h
flang/lib/Evaluate/host.cpp
flang/lib/Evaluate/intrinsics.cpp
flang/lib/Evaluate/variable.cpp
flang/lib/Parser/basic-parsers.h
flang/lib/Parser/preprocessor.cpp
flang/lib/Parser/prescan.cpp
flang/lib/Parser/token-parsers.h
flang/lib/Semantics/check-call.cpp
flang/lib/Semantics/check-case.cpp
flang/lib/Semantics/check-data.cpp
flang/lib/Semantics/check-declarations.cpp
flang/lib/Semantics/check-do-forall.cpp
flang/lib/Semantics/check-io.cpp
flang/lib/Semantics/check-omp-structure.cpp
flang/lib/Semantics/check-return.cpp
flang/lib/Semantics/data-to-inits.cpp
flang/lib/Semantics/expression.cpp
flang/lib/Semantics/mod-file.cpp
flang/lib/Semantics/resolve-labels.cpp
flang/lib/Semantics/resolve-names-utils.cpp
flang/lib/Semantics/resolve-names.cpp
flang/lib/Semantics/semantics.cpp
flang/test/Driver/fixed-free-flag.f90
flang/test/Evaluate/folding03.f90
flang/test/Evaluate/folding04.f90
flang/test/Evaluate/folding14.f90
flang/test/Evaluate/folding28.f90
flang/test/Frontend/prescanner-diag.f90
flang/test/Preprocessing/include-comment.F90
flang/test/Semantics/call25.f90
Removed:
################################################################################
diff --git a/flang/lib/Evaluate/check-expression.cpp b/flang/lib/Evaluate/check-expression.cpp
index dd8424e7728df..e4423f8c300f9 100644
--- a/flang/lib/Evaluate/check-expression.cpp
+++ b/flang/lib/Evaluate/check-expression.cpp
@@ -410,7 +410,7 @@ std::optional<Expr<SomeType>> NonPointerInitializationExpr(const Symbol &symbol,
symbol.owner().context().ShouldWarn(
common::LanguageFeature::LogicalIntegerAssignment)) {
context.messages().Say(
- "nonstandard usage: initialization of %s with %s"_en_US,
+ "nonstandard usage: initialization of %s with %s"_port_en_US,
symTS->type().AsFortran(), x.GetType().value().AsFortran());
}
}
diff --git a/flang/lib/Evaluate/common.cpp b/flang/lib/Evaluate/common.cpp
index 0cdd181d39613..3a3b01cc78306 100644
--- a/flang/lib/Evaluate/common.cpp
+++ b/flang/lib/Evaluate/common.cpp
@@ -16,20 +16,20 @@ namespace Fortran::evaluate {
void RealFlagWarnings(
FoldingContext &context, const RealFlags &flags, const char *operation) {
if (flags.test(RealFlag::Overflow)) {
- context.messages().Say("overflow on %s"_en_US, operation);
+ context.messages().Say("overflow on %s"_warn_en_US, operation);
}
if (flags.test(RealFlag::DivideByZero)) {
if (std::strcmp(operation, "division") == 0) {
- context.messages().Say("division by zero"_en_US);
+ context.messages().Say("division by zero"_warn_en_US);
} else {
- context.messages().Say("division on %s"_en_US);
+ context.messages().Say("division on %s"_warn_en_US);
}
}
if (flags.test(RealFlag::InvalidArgument)) {
- context.messages().Say("invalid argument on %s"_en_US, operation);
+ context.messages().Say("invalid argument on %s"_warn_en_US, operation);
}
if (flags.test(RealFlag::Underflow)) {
- context.messages().Say("underflow on %s"_en_US, operation);
+ context.messages().Say("underflow on %s"_warn_en_US, operation);
}
}
diff --git a/flang/lib/Evaluate/fold-complex.cpp b/flang/lib/Evaluate/fold-complex.cpp
index e7981a189ce27..ab73b8f517ac3 100644
--- a/flang/lib/Evaluate/fold-complex.cpp
+++ b/flang/lib/Evaluate/fold-complex.cpp
@@ -30,7 +30,8 @@ Expr<Type<TypeCategory::Complex, KIND>> FoldIntrinsicFunction(
context, std::move(funcRef), *callable);
} else {
context.messages().Say(
- "%s(complex(kind=%d)) cannot be folded on host"_en_US, name, KIND);
+ "%s(complex(kind=%d)) cannot be folded on host"_warn_en_US, name,
+ KIND);
}
} else if (name == "conjg") {
return FoldElementalIntrinsic<T, T>(
diff --git a/flang/lib/Evaluate/fold-implementation.h b/flang/lib/Evaluate/fold-implementation.h
index 14d9c981d0f41..34a4ce8cf5701 100644
--- a/flang/lib/Evaluate/fold-implementation.h
+++ b/flang/lib/Evaluate/fold-implementation.h
@@ -1534,7 +1534,7 @@ Expr<TO> FoldOperation(
auto converted{Scalar<TO>::ConvertSigned(*value)};
if (converted.overflow) {
ctx.messages().Say(
- "INTEGER(%d) to INTEGER(%d) conversion overflowed"_en_US,
+ "INTEGER(%d) to INTEGER(%d) conversion overflowed"_warn_en_US,
Operand::kind, TO::kind);
}
return ScalarConstantToExpr(std::move(converted.value));
@@ -1542,11 +1542,11 @@ Expr<TO> FoldOperation(
auto converted{value->template ToInteger<Scalar<TO>>()};
if (converted.flags.test(RealFlag::InvalidArgument)) {
ctx.messages().Say(
- "REAL(%d) to INTEGER(%d) conversion: invalid argument"_en_US,
+ "REAL(%d) to INTEGER(%d) conversion: invalid argument"_warn_en_US,
Operand::kind, TO::kind);
} else if (converted.flags.test(RealFlag::Overflow)) {
ctx.messages().Say(
- "REAL(%d) to INTEGER(%d) conversion overflowed"_en_US,
+ "REAL(%d) to INTEGER(%d) conversion overflowed"_warn_en_US,
Operand::kind, TO::kind);
}
return ScalarConstantToExpr(std::move(converted.value));
@@ -1651,7 +1651,7 @@ Expr<T> FoldOperation(FoldingContext &context, Negate<T> &&x) {
auto negated{value->Negate()};
if (negated.overflow) {
context.messages().Say(
- "INTEGER(%d) negation overflowed"_en_US, T::kind);
+ "INTEGER(%d) negation overflowed"_warn_en_US, T::kind);
}
return Expr<T>{Constant<T>{std::move(negated.value)}};
} else {
@@ -1691,7 +1691,7 @@ Expr<T> FoldOperation(FoldingContext &context, Add<T> &&x) {
auto sum{folded->first.AddSigned(folded->second)};
if (sum.overflow) {
context.messages().Say(
- "INTEGER(%d) addition overflowed"_en_US, T::kind);
+ "INTEGER(%d) addition overflowed"_warn_en_US, T::kind);
}
return Expr<T>{Constant<T>{sum.value}};
} else {
@@ -1716,7 +1716,7 @@ Expr<T> FoldOperation(FoldingContext &context, Subtract<T> &&x) {
auto
diff erence{folded->first.SubtractSigned(folded->second)};
if (
diff erence.overflow) {
context.messages().Say(
- "INTEGER(%d) subtraction overflowed"_en_US, T::kind);
+ "INTEGER(%d) subtraction overflowed"_warn_en_US, T::kind);
}
return Expr<T>{Constant<T>{
diff erence.value}};
} else {
@@ -1742,7 +1742,7 @@ Expr<T> FoldOperation(FoldingContext &context, Multiply<T> &&x) {
auto product{folded->first.MultiplySigned(folded->second)};
if (product.SignedMultiplicationOverflowed()) {
context.messages().Say(
- "INTEGER(%d) multiplication overflowed"_en_US, T::kind);
+ "INTEGER(%d) multiplication overflowed"_warn_en_US, T::kind);
}
return Expr<T>{Constant<T>{product.lower}};
} else {
@@ -1780,12 +1780,13 @@ Expr<T> FoldOperation(FoldingContext &context, Divide<T> &&x) {
if constexpr (T::category == TypeCategory::Integer) {
auto quotAndRem{folded->first.DivideSigned(folded->second)};
if (quotAndRem.divisionByZero) {
- context.messages().Say("INTEGER(%d) division by zero"_en_US, T::kind);
+ context.messages().Say(
+ "INTEGER(%d) division by zero"_warn_en_US, T::kind);
return Expr<T>{std::move(x)};
}
if (quotAndRem.overflow) {
context.messages().Say(
- "INTEGER(%d) division overflowed"_en_US, T::kind);
+ "INTEGER(%d) division overflowed"_warn_en_US, T::kind);
}
return Expr<T>{Constant<T>{quotAndRem.quotient}};
} else {
@@ -1810,12 +1811,13 @@ Expr<T> FoldOperation(FoldingContext &context, Power<T> &&x) {
auto power{folded->first.Power(folded->second)};
if (power.divisionByZero) {
context.messages().Say(
- "INTEGER(%d) zero to negative power"_en_US, T::kind);
+ "INTEGER(%d) zero to negative power"_warn_en_US, T::kind);
} else if (power.overflow) {
- context.messages().Say("INTEGER(%d) power overflowed"_en_US, T::kind);
+ context.messages().Say(
+ "INTEGER(%d) power overflowed"_warn_en_US, T::kind);
} else if (power.zeroToZero) {
context.messages().Say(
- "INTEGER(%d) 0**0 is not defined"_en_US, T::kind);
+ "INTEGER(%d) 0**0 is not defined"_warn_en_US, T::kind);
}
return Expr<T>{Constant<T>{power.power}};
} else {
@@ -1824,7 +1826,8 @@ Expr<T> FoldOperation(FoldingContext &context, Power<T> &&x) {
Constant<T>{(*callable)(context, folded->first, folded->second)}};
} else {
context.messages().Say(
- "Power for %s cannot be folded on host"_en_US, T{}.AsFortran());
+ "Power for %s cannot be folded on host"_warn_en_US,
+ T{}.AsFortran());
}
}
}
@@ -1907,7 +1910,7 @@ Expr<Type<TypeCategory::Real, KIND>> ToReal(
From converted{From::ConvertUnsigned(real.RawBits()).value};
if (original != converted) { // C1601
context.messages().Say(
- "Nonzero bits truncated from BOZ literal constant in REAL intrinsic"_en_US);
+ "Nonzero bits truncated from BOZ literal constant in REAL intrinsic"_warn_en_US);
}
} else if constexpr (IsNumericCategoryExpr<From>()) {
result = Fold(context, ConvertToType<Result>(std::move(x)));
diff --git a/flang/lib/Evaluate/fold-integer.cpp b/flang/lib/Evaluate/fold-integer.cpp
index df5fa0bd96123..53dfaf240c33d 100644
--- a/flang/lib/Evaluate/fold-integer.cpp
+++ b/flang/lib/Evaluate/fold-integer.cpp
@@ -420,7 +420,7 @@ Expr<Type<TypeCategory::Integer, KIND>> FoldIntrinsicFunction(
typename Scalar<T>::ValueWithOverflow j{i.ABS()};
if (j.overflow) {
context.messages().Say(
- "abs(integer(kind=%d)) folding overflowed"_en_US, KIND);
+ "abs(integer(kind=%d)) folding overflowed"_warn_en_US, KIND);
}
return j.value;
}));
@@ -440,7 +440,7 @@ Expr<Type<TypeCategory::Integer, KIND>> FoldIntrinsicFunction(
auto y{x.template ToInteger<Scalar<T>>(mode)};
if (y.flags.test(RealFlag::Overflow)) {
context.messages().Say(
- "%s intrinsic folding overflow"_en_US, name);
+ "%s intrinsic folding overflow"_warn_en_US, name);
}
return y.value;
}));
@@ -506,7 +506,7 @@ Expr<Type<TypeCategory::Integer, KIND>> FoldIntrinsicFunction(
if (len.value() != 1) {
// Do not die, this was not checked before
context.messages().Say(
- "Character in intrinsic function %s must have length one"_en_US,
+ "Character in intrinsic function %s must have length one"_warn_en_US,
name);
} else {
return std::visit(
@@ -761,9 +761,9 @@ Expr<Type<TypeCategory::Integer, KIND>> FoldIntrinsicFunction(
const Scalar<T> &y) -> Scalar<T> {
auto quotRem{x.DivideSigned(y)};
if (quotRem.divisionByZero) {
- context.messages().Say("mod() by zero"_en_US);
+ context.messages().Say("mod() by zero"_warn_en_US);
} else if (quotRem.overflow) {
- context.messages().Say("mod() folding overflowed"_en_US);
+ context.messages().Say("mod() folding overflowed"_warn_en_US);
}
return quotRem.remainder;
}));
@@ -774,7 +774,8 @@ Expr<Type<TypeCategory::Integer, KIND>> FoldIntrinsicFunction(
const Scalar<T> &y) -> Scalar<T> {
auto result{x.MODULO(y)};
if (result.overflow) {
- context.messages().Say("modulo() folding overflowed"_en_US);
+ context.messages().Say(
+ "modulo() folding overflowed"_warn_en_US);
}
return result.value;
}));
@@ -894,7 +895,8 @@ Expr<Type<TypeCategory::Integer, KIND>> FoldIntrinsicFunction(
typename Scalar<T>::ValueWithOverflow result{j.SIGN(k)};
if (result.overflow) {
context.messages().Say(
- "sign(integer(kind=%d)) folding overflowed"_en_US, KIND);
+ "sign(integer(kind=%d)) folding overflowed"_warn_en_US,
+ KIND);
}
return result.value;
}));
@@ -915,7 +917,7 @@ Expr<Type<TypeCategory::Integer, KIND>> FoldIntrinsicFunction(
}
} else {
context.messages().Say(
- "size(array,dim=%jd) dimension is out of range for rank-%d array"_en_US,
+ "size(array,dim=%jd) dimension is out of range for rank-%d array"_warn_en_US,
*dim, rank);
}
}
diff --git a/flang/lib/Evaluate/fold-real.cpp b/flang/lib/Evaluate/fold-real.cpp
index 0a7e16161cf5a..0d9de1346bd44 100644
--- a/flang/lib/Evaluate/fold-real.cpp
+++ b/flang/lib/Evaluate/fold-real.cpp
@@ -35,7 +35,7 @@ Expr<Type<TypeCategory::Real, KIND>> FoldIntrinsicFunction(
context, std::move(funcRef), *callable);
} else {
context.messages().Say(
- "%s(real(kind=%d)) cannot be folded on host"_en_US, name, KIND);
+ "%s(real(kind=%d)) cannot be folded on host"_warn_en_US, name, KIND);
}
} else if (name == "amax0" || name == "amin0" || name == "amin1" ||
name == "amax1" || name == "dmin1" || name == "dmax1") {
@@ -48,7 +48,7 @@ Expr<Type<TypeCategory::Real, KIND>> FoldIntrinsicFunction(
context, std::move(funcRef), *callable);
} else {
context.messages().Say(
- "%s(real(kind=%d), real(kind%d)) cannot be folded on host"_en_US,
+ "%s(real(kind=%d), real(kind%d)) cannot be folded on host"_warn_en_US,
name, KIND, KIND);
}
} else if (name == "bessel_jn" || name == "bessel_yn") {
@@ -60,7 +60,7 @@ Expr<Type<TypeCategory::Real, KIND>> FoldIntrinsicFunction(
context, std::move(funcRef), *callable);
} else {
context.messages().Say(
- "%s(integer(kind=4), real(kind=%d)) cannot be folded on host"_en_US,
+ "%s(integer(kind=4), real(kind=%d)) cannot be folded on host"_warn_en_US,
name, KIND);
}
}
@@ -90,7 +90,8 @@ Expr<Type<TypeCategory::Real, KIND>> FoldIntrinsicFunction(
const Scalar<T> &x) -> Scalar<T> {
ValueWithRealFlags<Scalar<T>> y{x.ToWholeNumber(mode)};
if (y.flags.test(RealFlag::Overflow)) {
- context.messages().Say("%s intrinsic folding overflow"_en_US, name);
+ context.messages().Say(
+ "%s intrinsic folding overflow"_warn_en_US, name);
}
return y.value;
}));
@@ -148,7 +149,7 @@ Expr<Type<TypeCategory::Real, KIND>> FoldIntrinsicFunction(
SCALE(y)};
if (result.flags.test(RealFlag::Overflow)) {
context.messages().Say(
- "SCALE intrinsic folding overflow"_en_US);
+ "SCALE intrinsic folding overflow"_warn_en_US);
}
return result.value;
}));
diff --git a/flang/lib/Evaluate/fold-reduction.h b/flang/lib/Evaluate/fold-reduction.h
index c7065c2c6bf62..d8a55df7013f6 100644
--- a/flang/lib/Evaluate/fold-reduction.h
+++ b/flang/lib/Evaluate/fold-reduction.h
@@ -173,7 +173,7 @@ static Expr<T> FoldProduct(
}};
if (overflow) {
context.messages().Say(
- "PRODUCT() of %s data overflowed"_en_US, T::AsFortran());
+ "PRODUCT() of %s data overflowed"_warn_en_US, T::AsFortran());
} else {
return Expr<T>{DoReduction<T>(*array, dim, identity, accumulator)};
}
@@ -212,7 +212,7 @@ static Expr<T> FoldSum(FoldingContext &context, FunctionRef<T> &&ref) {
}};
if (overflow) {
context.messages().Say(
- "SUM() of %s data overflowed"_en_US, T::AsFortran());
+ "SUM() of %s data overflowed"_warn_en_US, T::AsFortran());
} else {
return Expr<T>{DoReduction<T>(*array, dim, identity, accumulator)};
}
diff --git a/flang/lib/Evaluate/host.cpp b/flang/lib/Evaluate/host.cpp
index c9aa5c4bbce3b..b97a2619a2bb1 100644
--- a/flang/lib/Evaluate/host.cpp
+++ b/flang/lib/Evaluate/host.cpp
@@ -102,7 +102,7 @@ void HostFloatingPointEnvironment::SetUpHostFloatingPointEnvironment(
fesetround(FE_TONEAREST);
context.messages().Say(
"TiesAwayFromZero rounding mode is not available when folding constants"
- " with host runtime; using TiesToEven instead"_en_US);
+ " with host runtime; using TiesToEven instead"_warn_en_US);
break;
}
flags_.clear();
diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp
index 1a674ede0c6ff..dff34f491a080 100644
--- a/flang/lib/Evaluate/intrinsics.cpp
+++ b/flang/lib/Evaluate/intrinsics.cpp
@@ -2476,7 +2476,7 @@ std::optional<SpecificCall> IntrinsicProcTable::Implementation::Probe(
context.messages().Say(
"argument types do not match specific intrinsic '%s' "
"requirements; using '%s' generic instead and converting the "
- "result to %s if needed"_en_US,
+ "result to %s if needed"_port_en_US,
call.name, genericName, newType.AsFortran());
specificCall->specificIntrinsic.name = call.name;
specificCall->specificIntrinsic.characteristics.value()
diff --git a/flang/lib/Evaluate/variable.cpp b/flang/lib/Evaluate/variable.cpp
index 21a0e6b439f44..4788fc50e0759 100644
--- a/flang/lib/Evaluate/variable.cpp
+++ b/flang/lib/Evaluate/variable.cpp
@@ -223,14 +223,14 @@ std::optional<Expr<SomeCharacter>> Substring::Fold(FoldingContext &context) {
if (!result) { // error cases
if (*lbi < 1) {
context.messages().Say(
- "Lower bound (%jd) on substring is less than one"_en_US,
+ "Lower bound (%jd) on substring is less than one"_warn_en_US,
static_cast<std::intmax_t>(*lbi));
*lbi = 1;
lower_ = AsExpr(Constant<SubscriptInteger>{1});
}
if (length && *ubi > *length) {
context.messages().Say(
- "Upper bound (%jd) on substring is greater than character length (%jd)"_en_US,
+ "Upper bound (%jd) on substring is greater than character length (%jd)"_warn_en_US,
static_cast<std::intmax_t>(*ubi),
static_cast<std::intmax_t>(*length));
*ubi = *length;
diff --git a/flang/lib/Parser/basic-parsers.h b/flang/lib/Parser/basic-parsers.h
index 720d53c9e6e29..0404f9e2bed36 100644
--- a/flang/lib/Parser/basic-parsers.h
+++ b/flang/lib/Parser/basic-parsers.h
@@ -856,7 +856,7 @@ template <LanguageFeature LF, typename PA> class NonstandardParser {
auto result{parser_.Parse(state)};
if (result) {
state.Nonstandard(CharBlock{at, std::max(state.GetLocation(), at + 1)},
- LF, "nonstandard usage"_en_US);
+ LF, "nonstandard usage"_port_en_US);
}
return result;
}
@@ -887,8 +887,8 @@ template <LanguageFeature LF, typename PA> class DeprecatedParser {
auto at{state.GetLocation()};
auto result{parser_.Parse(state)};
if (result) {
- state.Nonstandard(
- CharBlock{at, state.GetLocation()}, LF, "deprecated usage"_en_US);
+ state.Nonstandard(CharBlock{at, state.GetLocation()}, LF,
+ "deprecated usage"_port_en_US);
}
return result;
}
diff --git a/flang/lib/Parser/preprocessor.cpp b/flang/lib/Parser/preprocessor.cpp
index 46b62a4f800df..c8f944e4a5967 100644
--- a/flang/lib/Parser/preprocessor.cpp
+++ b/flang/lib/Parser/preprocessor.cpp
@@ -495,7 +495,7 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner &prescanner) {
} else {
if (dir.IsAnythingLeft(++j)) {
prescanner.Say(dir.GetIntervalProvenanceRange(j, tokens - j),
- "#undef: excess tokens at end of directive"_en_US);
+ "#undef: excess tokens at end of directive"_port_en_US);
} else {
definitions_.erase(nameToken);
}
@@ -509,7 +509,7 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner &prescanner) {
} else {
if (dir.IsAnythingLeft(++j)) {
prescanner.Say(dir.GetIntervalProvenanceRange(j, tokens - j),
- "#%s: excess tokens at end of directive"_en_US, dirName);
+ "#%s: excess tokens at end of directive"_port_en_US, dirName);
}
doThen = IsNameDefined(nameToken) == (dirName == "ifdef");
}
@@ -529,7 +529,7 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner &prescanner) {
} else if (dirName == "else") {
if (dir.IsAnythingLeft(j)) {
prescanner.Say(dir.GetIntervalProvenanceRange(j, tokens - j),
- "#else: excess tokens at end of directive"_en_US);
+ "#else: excess tokens at end of directive"_port_en_US);
} else if (ifStack_.empty()) {
prescanner.Say(dir.GetTokenProvenanceRange(dirOffset),
"#else: not nested within #if, #ifdef, or #ifndef"_err_en_US);
@@ -556,7 +556,7 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner &prescanner) {
} else if (dirName == "endif") {
if (dir.IsAnythingLeft(j)) {
prescanner.Say(dir.GetIntervalProvenanceRange(j, tokens - j),
- "#endif: excess tokens at end of directive"_en_US);
+ "#endif: excess tokens at end of directive"_port_en_US);
} else if (ifStack_.empty()) {
prescanner.Say(dir.GetTokenProvenanceRange(dirOffset),
"#endif: no #if, #ifdef, or #ifndef"_err_en_US);
@@ -567,8 +567,11 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner &prescanner) {
prescanner.Say(
dir.GetIntervalProvenanceRange(dirOffset, tokens - dirOffset),
"%s"_err_en_US, dir.ToString());
- } else if (dirName == "warning" || dirName == "comment" ||
- dirName == "note") {
+ } else if (dirName == "warning") {
+ prescanner.Say(
+ dir.GetIntervalProvenanceRange(dirOffset, tokens - dirOffset),
+ "%s"_warn_en_US, dir.ToString());
+ } else if (dirName == "comment" || dirName == "note") {
prescanner.Say(
dir.GetIntervalProvenanceRange(dirOffset, tokens - dirOffset),
"%s"_en_US, dir.ToString());
@@ -593,7 +596,7 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner &prescanner) {
}
if (k >= tokens) {
prescanner.Say(dir.GetIntervalProvenanceRange(j, tokens - j),
- "#include: expected '>' at end of included file"_en_US);
+ "#include: expected '>' at end of included file"_port_en_US);
}
TokenSequence braced{dir, j + 1, k - j - 1};
include = ReplaceMacros(braced, prescanner).ToString();
@@ -620,7 +623,7 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner &prescanner) {
j = dir.SkipBlanks(j + 1);
if (j < tokens && dir.TokenAt(j).ToString() != "!") {
prescanner.Say(dir.GetIntervalProvenanceRange(j, tokens - j),
- "#include: extra stuff ignored after file name"_en_US);
+ "#include: extra stuff ignored after file name"_port_en_US);
}
std::string buf;
llvm::raw_string_ostream error{buf};
diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp
index 7d7ee3616fcfb..b4b8a17341f7d 100644
--- a/flang/lib/Parser/prescan.cpp
+++ b/flang/lib/Parser/prescan.cpp
@@ -181,7 +181,7 @@ void Prescanner::Statement() {
case LineClassification::Kind::DefinitionDirective:
case LineClassification::Kind::PreprocessorDirective:
Say(preprocessed->GetProvenanceRange(),
- "Preprocessed line resembles a preprocessor directive"_en_US);
+ "Preprocessed line resembles a preprocessor directive"_warn_en_US);
preprocessed->ToLowerCase()
.CheckBadFortranCharacters(messages_)
.CheckBadParentheses(messages_)
@@ -280,7 +280,7 @@ void Prescanner::LabelField(TokenSequence &token) {
}
if (bad && !preprocessor_.IsNameDefined(token.CurrentOpenToken())) {
Say(GetProvenance(bad),
- "Character in fixed-form label field must be a digit"_en_US);
+ "Character in fixed-form label field must be a digit"_warn_en_US);
token.clear();
at_ = start;
return;
@@ -296,7 +296,7 @@ void Prescanner::LabelField(TokenSequence &token) {
SkipToNextSignificantCharacter();
if (IsDecimalDigit(*at_)) {
Say(GetProvenance(at_),
- "Label digit is not in fixed-form label field"_en_US);
+ "Label digit is not in fixed-form label field"_port_en_US);
}
}
@@ -489,7 +489,8 @@ bool Prescanner::NextToken(TokenSequence &tokens) {
// Recognize and skip over classic C style /*comments*/ when
// outside a character literal.
if (features_.ShouldWarn(LanguageFeature::ClassicCComments)) {
- Say(GetProvenance(at_), "nonstandard usage: C-style comment"_en_US);
+ Say(GetProvenance(at_),
+ "nonstandard usage: C-style comment"_port_en_US);
}
SkipCComments();
}
@@ -698,7 +699,7 @@ void Prescanner::Hollerith(
if (PadOutCharacterLiteral(tokens)) {
} else if (*at_ == '\n') {
Say(GetProvenanceRange(start, at_),
- "Possible truncated Hollerith literal"_en_US);
+ "Possible truncated Hollerith literal"_warn_en_US);
break;
} else {
NextChar();
@@ -827,7 +828,7 @@ void Prescanner::FortranInclude(const char *firstQuote) {
for (; *p != '\n' && *p != '!'; ++p) {
}
Say(GetProvenanceRange(garbage, p),
- "excess characters after path name"_en_US);
+ "excess characters after path name"_warn_en_US);
}
std::string buf;
llvm::raw_string_ostream error{buf};
@@ -951,7 +952,7 @@ const char *Prescanner::FixedFormContinuationLine(bool mightNeedSpace) {
// Extension: '&' as continuation marker
if (features_.ShouldWarn(
LanguageFeature::FixedFormContinuationWithColumn1Ampersand)) {
- Say(GetProvenance(nextLine_), "nonstandard usage"_en_US);
+ Say(GetProvenance(nextLine_), "nonstandard usage"_port_en_US);
}
return nextLine_ + 1;
}
@@ -1045,7 +1046,7 @@ bool Prescanner::FreeFormContinuation() {
return false;
} else if (*p != '!' &&
features_.ShouldWarn(LanguageFeature::CruftAfterAmpersand)) {
- Say(GetProvenance(p), "missing ! before comment after &"_en_US);
+ Say(GetProvenance(p), "missing ! before comment after &"_warn_en_US);
}
}
do {
diff --git a/flang/lib/Parser/token-parsers.h b/flang/lib/Parser/token-parsers.h
index 8d9c79e5c4e03..be37f11d17d94 100644
--- a/flang/lib/Parser/token-parsers.h
+++ b/flang/lib/Parser/token-parsers.h
@@ -82,7 +82,7 @@ constexpr Space space;
inline void MissingSpace(ParseState &state) {
if (!state.inFixedForm()) {
state.Nonstandard(
- LanguageFeature::OptionalFreeFormSpace, "missing space"_en_US);
+ LanguageFeature::OptionalFreeFormSpace, "missing space"_port_en_US);
}
}
@@ -294,8 +294,8 @@ struct BOZLiteral {
return std::nullopt;
}
if (**at == 'x' &&
- !state.IsNonstandardOk(
- LanguageFeature::BOZExtensions, "nonstandard BOZ literal"_en_US)) {
+ !state.IsNonstandardOk(LanguageFeature::BOZExtensions,
+ "nonstandard BOZ literal"_port_en_US)) {
return std::nullopt;
}
if (baseChar(**at)) {
@@ -332,7 +332,7 @@ struct BOZLiteral {
// extension: base allowed to appear as suffix, too
if (!(at = nextCh.Parse(state)) || !baseChar(**at) ||
!state.IsNonstandardOk(LanguageFeature::BOZExtensions,
- "nonstandard BOZ literal"_en_US)) {
+ "nonstandard BOZ literal"_port_en_US)) {
return std::nullopt;
}
spaceCheck.Parse(state);
@@ -634,7 +634,7 @@ struct SkipStuffBeforeStatement {
}
} else if (**at == ';' &&
state.IsNonstandardOk(
- LanguageFeature::EmptyStatement, "empty statement"_en_US)) {
+ LanguageFeature::EmptyStatement, "empty statement"_port_en_US)) {
state.UncheckedAdvance();
} else {
break;
diff --git a/flang/lib/Semantics/check-call.cpp b/flang/lib/Semantics/check-call.cpp
index c942bb3d0b973..45a83fe710983 100644
--- a/flang/lib/Semantics/check-call.cpp
+++ b/flang/lib/Semantics/check-call.cpp
@@ -93,7 +93,7 @@ static void PadShortCharacterActual(evaluate::Expr<evaluate::SomeType> &actual,
ToInt64(Fold(context, common::Clone(*actualType.LEN())))};
if (dummyLength && actualLength && *actualLength < *dummyLength) {
messages.Say(
- "Actual length '%jd' is less than expected length '%jd'"_en_US,
+ "Actual length '%jd' is less than expected length '%jd'"_warn_en_US,
*actualLength, *dummyLength);
auto converted{ConvertToType(dummyType.type(), std::move(actual))};
CHECK(converted);
@@ -124,7 +124,7 @@ static void ConvertIntegerActual(evaluate::Expr<evaluate::SomeType> &actual,
actual = std::move(*converted);
if (dummyType.type().kind() < actualType.type().kind()) {
messages.Say(
- "Actual argument scalar expression of type INTEGER(%d) was converted to smaller dummy argument type INTEGER(%d)"_en_US,
+ "Actual argument scalar expression of type INTEGER(%d) was converted to smaller dummy argument type INTEGER(%d)"_port_en_US,
actualType.type().kind(), dummyType.type().kind());
}
actualType = dummyType;
@@ -451,7 +451,7 @@ static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy,
if (dummy.intent == common::Intent::In && typesCompatible) {
// extension: allow with warning, rule is only relevant for definables
messages.Say(
- "If a POINTER or ALLOCATABLE dummy or actual argument is polymorphic, both should be so"_en_US);
+ "If a POINTER or ALLOCATABLE dummy or actual argument is polymorphic, both should be so"_port_en_US);
} else {
messages.Say(
"If a POINTER or ALLOCATABLE dummy or actual argument is polymorphic, both must be so"_err_en_US);
@@ -461,7 +461,7 @@ static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy,
if (dummy.intent == common::Intent::In) {
// extension: allow with warning, rule is only relevant for definables
messages.Say(
- "POINTER or ALLOCATABLE dummy and actual arguments should have the same declared type and kind"_en_US);
+ "POINTER or ALLOCATABLE dummy and actual arguments should have the same declared type and kind"_port_en_US);
} else {
messages.Say(
"POINTER or ALLOCATABLE dummy and actual arguments must have the same declared type and kind"_err_en_US);
@@ -577,7 +577,7 @@ static void CheckProcedureArg(evaluate::ActualArgument &arg,
messages.Say(
"Actual procedure argument has an implicit interface "
"which is not known to be compatible with %s which has an "
- "explicit interface"_en_US,
+ "explicit interface"_warn_en_US,
dummyName);
}
}
@@ -882,7 +882,7 @@ void CheckArguments(const characteristics::Procedure &proc,
CheckExplicitInterface(proc, actuals, context, scope, intrinsic)};
if (treatingExternalAsImplicit && !buffer.empty()) {
if (auto *msg{messages.Say(
- "Warning: if the procedure's interface were explicit, this reference would be in error:"_en_US)}) {
+ "If the procedure's interface were explicit, this reference would be in error:"_warn_en_US)}) {
buffer.AttachTo(*msg);
}
}
diff --git a/flang/lib/Semantics/check-case.cpp b/flang/lib/Semantics/check-case.cpp
index 5aee11e106cf4..3c52de8306b69 100644
--- a/flang/lib/Semantics/check-case.cpp
+++ b/flang/lib/Semantics/check-case.cpp
@@ -50,7 +50,7 @@ template <typename T> class CaseValues {
auto pair{ComputeBounds(range)};
if (pair.first && pair.second && *pair.first > *pair.second) {
context_.Say(stmt.source,
- "CASE has lower bound greater than upper bound"_en_US);
+ "CASE has lower bound greater than upper bound"_warn_en_US);
} else {
if constexpr (T::category == TypeCategory::Logical) { // C1148
if ((pair.first || pair.second) &&
diff --git a/flang/lib/Semantics/check-data.cpp b/flang/lib/Semantics/check-data.cpp
index af04f84de88cf..a63e9b27d1928 100644
--- a/flang/lib/Semantics/check-data.cpp
+++ b/flang/lib/Semantics/check-data.cpp
@@ -81,12 +81,12 @@ class DataVarChecker : public evaluate::AllTraverse<DataVarChecker, true> {
}
if (IsProcedurePointer(symbol)) {
context_.Say(source_,
- "Procedure pointer '%s' in a DATA statement is not standard"_en_US,
+ "Procedure pointer '%s' in a DATA statement is not standard"_port_en_US,
symbol.name());
}
if (IsInBlankCommon(symbol)) {
context_.Say(source_,
- "Blank COMMON object '%s' in a DATA statement is not standard"_en_US,
+ "Blank COMMON object '%s' in a DATA statement is not standard"_port_en_US,
symbol.name());
}
return true;
diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp
index 830342dc565e0..924cd5e55caba 100644
--- a/flang/lib/Semantics/check-declarations.cpp
+++ b/flang/lib/Semantics/check-declarations.cpp
@@ -588,7 +588,7 @@ void CheckHelper::CheckObjectEntity(
messages_.Say("A function result must not be initialized"_err_en_US);
} else if (IsInBlankCommon(symbol)) {
messages_.Say(
- "A variable in blank COMMON should not be initialized"_en_US);
+ "A variable in blank COMMON should not be initialized"_port_en_US);
}
}
if (symbol.owner().kind() == Scope::Kind::BlockData) {
@@ -1417,10 +1417,10 @@ void CheckHelper::WarnMissingFinal(const Symbol &symbol) {
!derivedDetails->GetFinalForRank(rank)) {
if (auto *msg{derivedSym == initialDerivedSym
? messages_.Say(symbol.name(),
- "'%s' of derived type '%s' does not have a FINAL subroutine for its rank (%d)"_en_US,
+ "'%s' of derived type '%s' does not have a FINAL subroutine for its rank (%d)"_warn_en_US,
symbol.name(), derivedSym->name(), rank)
: messages_.Say(symbol.name(),
- "'%s' of derived type '%s' extended from '%s' does not have a FINAL subroutine for its rank (%d)"_en_US,
+ "'%s' of derived type '%s' extended from '%s' does not have a FINAL subroutine for its rank (%d)"_warn_en_US,
symbol.name(), initialDerivedSym->name(),
derivedSym->name(), rank)}) {
msg->Attach(derivedSym->name(),
diff --git a/flang/lib/Semantics/check-do-forall.cpp b/flang/lib/Semantics/check-do-forall.cpp
index 42a2ee6e2dead..76d4ead4af091 100644
--- a/flang/lib/Semantics/check-do-forall.cpp
+++ b/flang/lib/Semantics/check-do-forall.cpp
@@ -472,7 +472,7 @@ class DoContext {
if (isReal && !warn) {
// No messages for the default case
} else if (isReal && warn) {
- context_.Say(sourceLocation, "DO controls should be INTEGER"_en_US);
+ context_.Say(sourceLocation, "DO controls should be INTEGER"_port_en_US);
} else {
SayBadDoControl(sourceLocation);
}
@@ -520,7 +520,7 @@ class DoContext {
CheckDoExpression(*bounds.step);
if (IsZero(*bounds.step)) {
context_.Say(bounds.step->thing.value().source,
- "DO step expression should not be zero"_en_US);
+ "DO step expression should not be zero"_warn_en_US);
}
}
}
@@ -645,7 +645,7 @@ class DoContext {
if (hasDefaultNone) {
// C1127, you can only have one DEFAULT(NONE)
context_.Say(currentStatementSourcePosition_,
- "Only one DEFAULT(NONE) may appear"_en_US);
+ "Only one DEFAULT(NONE) may appear"_port_en_US);
break;
}
hasDefaultNone = true;
@@ -768,9 +768,8 @@ class DoContext {
assignment.u);
for (const Symbol &index : indexVars) {
if (symbols.count(index) == 0) {
- context_.Say(
- "Warning: FORALL index variable '%s' not used on left-hand side"
- " of assignment"_en_US,
+ context_.Say("FORALL index variable '%s' not used on left-hand side"
+ " of assignment"_warn_en_US,
index.name());
}
}
diff --git a/flang/lib/Semantics/check-io.cpp b/flang/lib/Semantics/check-io.cpp
index da266c15f8e4c..2bb6678e6e177 100644
--- a/flang/lib/Semantics/check-io.cpp
+++ b/flang/lib/Semantics/check-io.cpp
@@ -235,7 +235,7 @@ void IoChecker::Enter(const parser::Format &spec) {
if (context_.ShouldWarn(
common::LanguageFeature::NonCharacterFormat)) {
context_.Say(format.source,
- "Non-character format expression is not standard"_en_US);
+ "Non-character format expression is not standard"_port_en_US);
}
} else if (!type ||
type->kind() !=
@@ -873,8 +873,9 @@ void IoChecker::CheckStringValue(IoSpecKind specKind, const std::string &value,
if (specKind == IoSpecKind::Access && upper == "APPEND") {
if (context_.languageFeatures().ShouldWarn(
common::LanguageFeature::OpenAccessAppend)) {
- context_.Say(source, "ACCESS='%s' interpreted as POSITION='%s'"_en_US,
- value, upper);
+ context_.Say(source,
+ "ACCESS='%s' interpreted as POSITION='%s'"_port_en_US, value,
+ upper);
}
} else {
context_.Say(source, "Invalid %s value '%s'"_err_en_US,
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index 9c9fb800bb155..5109618b8c73d 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -519,7 +519,7 @@ void OmpStructureChecker::CheckTargetNest(const parser::OpenMPConstruct &c) {
if (!eligibleTarget) {
context_.Say(parser::FindSourceLocation(c),
"If %s directive is nested inside TARGET region, the behaviour "
- "is unspecified"_en_US,
+ "is unspecified"_port_en_US,
parser::ToUpperCaseLetters(
getDirectiveName(ineligibleTargetDir).str()));
}
@@ -874,7 +874,7 @@ void OmpStructureChecker::CheckThreadprivateOrDeclareTargetVar(
llvm::omp::Directive::OMPD_declare_target)
context_.Say(name->source,
"The entity with PARAMETER attribute is used in a %s "
- "directive"_en_US,
+ "directive"_warn_en_US,
ContextDirectiveAsFortran());
} else if (FindCommonBlockContaining(*name->symbol)) {
context_.Say(name->source,
diff --git a/flang/lib/Semantics/check-return.cpp b/flang/lib/Semantics/check-return.cpp
index 7830df034b553..b28c82b37bb84 100644
--- a/flang/lib/Semantics/check-return.cpp
+++ b/flang/lib/Semantics/check-return.cpp
@@ -37,7 +37,7 @@ void ReturnStmtChecker::Leave(const parser::ReturnStmt &returnStmt) {
context_.Say(
"RETURN with expression is only allowed in SUBROUTINE subprogram"_err_en_US);
} else if (context_.ShouldWarn(common::LanguageFeature::ProgramReturn)) {
- context_.Say("RETURN should not appear in a main program"_en_US);
+ context_.Say("RETURN should not appear in a main program"_port_en_US);
}
}
}
diff --git a/flang/lib/Semantics/data-to-inits.cpp b/flang/lib/Semantics/data-to-inits.cpp
index b790d31df90fb..6bdbf5f6549fd 100644
--- a/flang/lib/Semantics/data-to-inits.cpp
+++ b/flang/lib/Semantics/data-to-inits.cpp
@@ -290,7 +290,8 @@ DataInitializationCompiler<DSV>::ConvertElement(
exprAnalyzer_.GetFoldingContext(), type, expr)}) {
if (context.ShouldWarn(
common::LanguageFeature::LogicalIntegerAssignment)) {
- context.Say("nonstandard usage: initialization of %s with %s"_en_US,
+ context.Say(
+ "nonstandard usage: initialization of %s with %s"_port_en_US,
type.AsFortran(), expr.GetType().value().AsFortran());
}
return {std::make_pair(std::move(*converted), false)};
@@ -398,11 +399,11 @@ bool DataInitializationCompiler<DSV>::InitElement(
if (IsBOZLiteral(*expr) &&
designatorType->category() != TypeCategory::Integer) { // 8.6.7(11)
exprAnalyzer_.Say(
- "BOZ literal should appear in a DATA statement only as a value for an integer object, but '%s' is '%s'"_en_US,
+ "BOZ literal should appear in a DATA statement only as a value for an integer object, but '%s' is '%s'"_port_en_US,
DescribeElement(), designatorType->AsFortran());
} else if (converted->second) {
exprAnalyzer_.context().Say(
- "DATA statement value initializes '%s' of type '%s' with CHARACTER"_en_US,
+ "DATA statement value initializes '%s' of type '%s' with CHARACTER"_port_en_US,
DescribeElement(), designatorType->AsFortran());
}
auto folded{evaluate::Fold(context, std::move(converted->first))};
diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp
index 2fcc7735c8757..3bd87b6715ba1 100644
--- a/flang/lib/Semantics/expression.cpp
+++ b/flang/lib/Semantics/expression.cpp
@@ -433,7 +433,7 @@ struct IntTypeVisitor {
LanguageFeature::BigIntLiterals)) {
analyzer.Say(digits,
"Integer literal is too large for default INTEGER(KIND=%d); "
- "assuming INTEGER(KIND=%d)"_en_US,
+ "assuming INTEGER(KIND=%d)"_port_en_US,
kind, T::kind);
}
}
@@ -556,7 +556,7 @@ MaybeExpr ExpressionAnalyzer::Analyze(const parser::RealLiteralConstant &x) {
auto kind{AnalyzeKindParam(x.kind, defaultKind)};
if (letterKind && kind != *letterKind && expoLetter != 'e') {
Say("Explicit kind parameter on real constant disagrees with "
- "exponent letter '%c'"_en_US,
+ "exponent letter '%c'"_port_en_US,
expoLetter);
}
auto result{common::SearchTypes(
@@ -1284,7 +1284,7 @@ void ArrayConstructorContext::Push(MaybeExpr &&x) {
if (exprAnalyzer_.context().ShouldWarn(
common::LanguageFeature::BOZAsDefaultInteger)) {
exprAnalyzer_.Say(
- "BOZ literal in array constructor without explicit type is assumed to be default INTEGER"_en_US);
+ "BOZ literal in array constructor without explicit type is assumed to be default INTEGER"_port_en_US);
}
x = AsGenericExpr(ConvertToKind<TypeCategory::Integer>(
exprAnalyzer_.GetDefaultKind(TypeCategory::Integer),
@@ -1299,7 +1299,7 @@ void ArrayConstructorContext::Push(MaybeExpr &&x) {
if (exprAnalyzer_.context().ShouldWarn(
common::LanguageFeature::BOZAsDefaultInteger)) {
exprAnalyzer_.Say(
- "BOZ literal in array constructor without explicit type is assumed to be default INTEGER"_en_US);
+ "BOZ literal in array constructor without explicit type is assumed to be default INTEGER"_port_en_US);
}
x = AsGenericExpr(ConvertToKind<TypeCategory::Integer>(
exprAnalyzer_.GetDefaultKind(TypeCategory::Integer),
@@ -1360,7 +1360,7 @@ void ArrayConstructorContext::Push(MaybeExpr &&x) {
if (!(messageDisplayedSet_ & 1)) {
exprAnalyzer_.Say(
"Character literal in array constructor without explicit "
- "type has
diff erent length than earlier elements"_en_US);
+ "type has
diff erent length than earlier elements"_port_en_US);
messageDisplayedSet_ |= 1;
}
}
@@ -1642,7 +1642,7 @@ MaybeExpr ExpressionAnalyzer::Analyze(
if (context().ShouldWarn(LanguageFeature::AnonymousParents)) {
Say(source,
"Whole parent component '%s' in structure "
- "constructor should not be anonymous"_en_US,
+ "constructor should not be anonymous"_port_en_US,
symbol->name());
}
}
@@ -2245,7 +2245,7 @@ void ExpressionAnalyzer::CheckBadExplicitType(
typeAndShape->Characterize(intrinsic, GetFoldingContext())}) {
if (!declared->type().IsTkCompatibleWith(typeAndShape->type())) {
if (auto *msg{Say(
- "The result type '%s' of the intrinsic function '%s' is not the explicit declared type '%s'"_en_US,
+ "The result type '%s' of the intrinsic function '%s' is not the explicit declared type '%s'"_warn_en_US,
typeAndShape->AsFortran(), intrinsic.name(),
declared->AsFortran())}) {
msg->Attach(intrinsic.name(),
@@ -3452,10 +3452,10 @@ bool ArgumentAnalyzer::OkLogicalIntegerAssignment(
std::optional<parser::MessageFixedText> msg;
if (lhs == TypeCategory::Integer && rhs == TypeCategory::Logical) {
// allow assignment to LOGICAL from INTEGER as a legacy extension
- msg = "nonstandard usage: assignment of LOGICAL to INTEGER"_en_US;
+ msg = "nonstandard usage: assignment of LOGICAL to INTEGER"_port_en_US;
} else if (lhs == TypeCategory::Logical && rhs == TypeCategory::Integer) {
// ... and assignment to LOGICAL from INTEGER
- msg = "nonstandard usage: assignment of INTEGER to LOGICAL"_en_US;
+ msg = "nonstandard usage: assignment of INTEGER to LOGICAL"_port_en_US;
} else {
return false;
}
diff --git a/flang/lib/Semantics/mod-file.cpp b/flang/lib/Semantics/mod-file.cpp
index ce1c37ef59a40..26a2da1c6b930 100644
--- a/flang/lib/Semantics/mod-file.cpp
+++ b/flang/lib/Semantics/mod-file.cpp
@@ -954,7 +954,7 @@ Scope *ModFileReader::Read(const SourceName &name,
}
CHECK(sourceFile);
if (!VerifyHeader(sourceFile->content())) {
- Say(name, ancestorName, "File has invalid checksum: %s"_en_US,
+ Say(name, ancestorName, "File has invalid checksum: %s"_warn_en_US,
sourceFile->path());
return nullptr;
}
diff --git a/flang/lib/Semantics/resolve-labels.cpp b/flang/lib/Semantics/resolve-labels.cpp
index 83c2ff79e4588..783ed91498f95 100644
--- a/flang/lib/Semantics/resolve-labels.cpp
+++ b/flang/lib/Semantics/resolve-labels.cpp
@@ -868,7 +868,9 @@ void CheckBranchesIntoDoBody(const SourceStmtList &branches,
const auto &toPosition{branchTarget.parserCharBlock};
for (const auto &body : loopBodies) {
if (!InBody(fromPosition, body) && InBody(toPosition, body)) {
- context.Say(fromPosition, "branch into loop body from outside"_en_US)
+ context
+ .Say(
+ fromPosition, "branch into loop body from outside"_warn_en_US)
.Attach(body.first, "the loop branched into"_en_US);
}
}
@@ -937,7 +939,7 @@ void CheckLabelDoConstraints(const SourceStmtList &dos,
common::LanguageFeature::OldLabelDoEndStatements)) {
context
.Say(position,
- "A DO loop should terminate with an END DO or CONTINUE"_en_US)
+ "A DO loop should terminate with an END DO or CONTINUE"_port_en_US)
.Attach(doTarget.parserCharBlock,
"DO loop currently ends at statement:"_en_US);
}
@@ -1018,7 +1020,7 @@ void CheckBranchTargetConstraints(const SourceStmtList &stmts,
TargetStatementEnum::Branch)) { // warning
context
.Say(branchTarget.parserCharBlock,
- "Label '%u' is not a branch target"_en_US, SayLabel(label))
+ "Label '%u' is not a branch target"_warn_en_US, SayLabel(label))
.Attach(stmt.parserCharBlock, "Control flow use of '%u'"_en_US,
SayLabel(label));
}
@@ -1072,7 +1074,7 @@ void CheckAssignTargetConstraints(const SourceStmtList &stmts,
.Say(target.parserCharBlock,
target.labeledStmtClassificationSet.test(
TargetStatementEnum::CompatibleBranch)
- ? "Label '%u' is not a branch target or FORMAT"_en_US
+ ? "Label '%u' is not a branch target or FORMAT"_warn_en_US
: "Label '%u' is not a branch target or FORMAT"_err_en_US,
SayLabel(label))
.Attach(stmt.parserCharBlock, "ASSIGN statement use of '%u'"_en_US,
diff --git a/flang/lib/Semantics/resolve-names-utils.cpp b/flang/lib/Semantics/resolve-names-utils.cpp
index 4c3c32e1a0af6..2d8f2c16bb8b3 100644
--- a/flang/lib/Semantics/resolve-names-utils.cpp
+++ b/flang/lib/Semantics/resolve-names-utils.cpp
@@ -436,9 +436,9 @@ bool EquivalenceSets::CheckCanEquivalence(
!(isAnyNum2 || isChar2)) { // C8110 - C8113
if (AreTkCompatibleTypes(type1, type2)) {
if (context_.ShouldWarn(LanguageFeature::EquivalenceSameNonSequence)) {
- msg = "nonstandard: Equivalence set contains '%s' and '%s' with same "
- "type "
- "that is neither numeric nor character sequence type"_en_US;
+ msg =
+ "nonstandard: Equivalence set contains '%s' and '%s' with same "
+ "type that is neither numeric nor character sequence type"_port_en_US;
}
} else {
msg = "Equivalence set cannot contain '%s' and '%s' with distinct types "
@@ -449,20 +449,17 @@ bool EquivalenceSets::CheckCanEquivalence(
if (context_.ShouldWarn(
LanguageFeature::EquivalenceNumericWithCharacter)) {
msg = "nonstandard: Equivalence set contains '%s' that is numeric "
- "sequence "
- "type and '%s' that is character"_en_US;
+ "sequence type and '%s' that is character"_port_en_US;
}
} else if (isAnyNum2 &&
context_.ShouldWarn(LanguageFeature::EquivalenceNonDefaultNumeric)) {
if (isDefaultNum1) {
msg =
"nonstandard: Equivalence set contains '%s' that is a default "
- "numeric "
- "sequence type and '%s' that is numeric with non-default kind"_en_US;
+ "numeric sequence type and '%s' that is numeric with non-default kind"_port_en_US;
} else if (!isDefaultNum2) {
msg = "nonstandard: Equivalence set contains '%s' and '%s' that are "
- "numeric "
- "sequence types with non-default kinds"_en_US;
+ "numeric sequence types with non-default kinds"_port_en_US;
}
}
}
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 07135b5796d46..6301e88b24f12 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -1608,7 +1608,7 @@ void AttrsVisitor::SetBindNameOn(Symbol &symbol) {
auto first{label->find_first_not_of(" ")};
if (first == std::string::npos) {
// Empty NAME= means no binding at all (18.10.2p2)
- Say(currStmtSource().value(), "Blank binding label ignored"_en_US);
+ Say(currStmtSource().value(), "Blank binding label ignored"_warn_en_US);
return;
}
auto last{label->find_last_not_of(" ")};
@@ -1646,7 +1646,7 @@ bool AttrsVisitor::Pre(const parser::Pass &x) {
bool AttrsVisitor::IsDuplicateAttr(Attr attrName) {
if (attrs_->test(attrName)) {
Say(currStmtSource().value(),
- "Attribute '%s' cannot be used more than once"_en_US,
+ "Attribute '%s' cannot be used more than once"_warn_en_US,
AttrToString(attrName));
return true;
}
@@ -2280,7 +2280,7 @@ bool ScopeHandler::ImplicitlyTypeForwardRef(Symbol &symbol) {
if (context().languageFeatures().ShouldWarn(
common::LanguageFeature::ForwardRefDummyImplicitNone)) {
Say(symbol.name(),
- "Dummy argument '%s' was used without being explicitly typed"_en_US,
+ "Dummy argument '%s' was used without being explicitly typed"_warn_en_US,
symbol.name());
}
symbol.set(Symbol::Flag::Implicit);
@@ -3137,7 +3137,7 @@ void SubprogramVisitor::Post(const parser::FunctionStmt &stmt) {
Say(info.resultName->source,
"The function name should not appear in RESULT, references to '%s' "
"inside the function will be considered as references to the "
- "result only"_en_US,
+ "result only"_warn_en_US,
name.source);
// RESULT name was ignored above, the only side effect from doing so will be
// the inability to make recursive calls. The related parser::Name is still
@@ -3810,7 +3810,7 @@ bool DeclarationVisitor::Pre(const parser::IntrinsicStmt &x) {
// These warnings are worded so that they should make sense in either
// order.
Say(symbol.name(),
- "Explicit type declaration ignored for intrinsic function '%s'"_en_US,
+ "Explicit type declaration ignored for intrinsic function '%s'"_warn_en_US,
symbol.name())
.Attach(name.source,
"INTRINSIC statement for explicitly-typed '%s'"_en_US,
@@ -4328,14 +4328,14 @@ bool DeclarationVisitor::Pre(const parser::PrivateStmt &) {
derivedTypeInfo_.privateComps = true;
} else {
Say("PRIVATE may not appear more than once in"
- " derived type components"_en_US); // C738
+ " derived type components"_warn_en_US); // C738
}
return false;
}
bool DeclarationVisitor::Pre(const parser::SequenceStmt &) {
if (derivedTypeInfo_.sequence) {
Say("SEQUENCE may not appear more than once in"
- " derived type components"_en_US); // C738
+ " derived type components"_warn_en_US); // C738
}
derivedTypeInfo_.sequence = true;
return false;
@@ -4427,7 +4427,7 @@ bool DeclarationVisitor::Pre(const parser::DataComponentDefStmt &x) {
if (GetAttrs().test(Attr::POINTER) &&
context().IsEnabled(common::LanguageFeature::PointerInSeqType)) {
if (context().ShouldWarn(common::LanguageFeature::PointerInSeqType)) {
- Say("A sequence type data component that is a pointer to a non-sequence type is not standard"_en_US);
+ Say("A sequence type data component that is a pointer to a non-sequence type is not standard"_port_en_US);
}
} else {
Say("A sequence type data component must either be of an intrinsic type or a derived sequence type"_err_en_US);
@@ -5037,7 +5037,7 @@ void DeclarationVisitor::AddSaveName(
std::set<SourceName> &set, const SourceName &name) {
auto pair{set.insert(name)};
if (!pair.second) {
- Say2(name, "SAVE attribute was already specified on '%s'"_en_US,
+ Say2(name, "SAVE attribute was already specified on '%s'"_warn_en_US,
*pair.first, "Previous specification of SAVE attribute"_en_US);
}
}
@@ -5453,7 +5453,7 @@ bool DeclarationVisitor::OkToAddComponent(
CHECK(scope->IsDerivedType());
if (auto *prev{FindInScope(*scope, name)}) {
if (!context().HasError(*prev)) {
- auto msg{""_en_US};
+ parser::MessageFixedText msg;
if (extends) {
msg = "Type cannot be extended as it has a component named"
" '%s'"_err_en_US;
@@ -5575,7 +5575,8 @@ bool ConstructVisitor::Pre(const parser::LocalitySpec::LocalInit &x) {
bool ConstructVisitor::Pre(const parser::LocalitySpec::Shared &x) {
for (const auto &name : x.v) {
if (!FindSymbol(name)) {
- Say(name, "Variable '%s' with SHARED locality implicitly declared"_en_US);
+ Say(name,
+ "Variable '%s' with SHARED locality implicitly declared"_warn_en_US);
}
Symbol &prev{FindOrDeclareEnclosingEntity(name)};
if (PassesSharedLocalityChecks(name, prev)) {
@@ -6175,7 +6176,7 @@ const parser::Name *DeclarationVisitor::ResolveName(const parser::Name &name) {
if (checkIndexUseInOwnBounds_ &&
*checkIndexUseInOwnBounds_ == name.source) {
Say(name,
- "Implied DO index '%s' uses an object of the same name in its bounds expressions"_en_US,
+ "Implied DO index '%s' uses an object of the same name in its bounds expressions"_port_en_US,
name.source);
}
return &name;
@@ -6655,7 +6656,7 @@ Symbol &ModuleVisitor::SetAccess(
Attr prev = attrs.test(Attr::PUBLIC) ? Attr::PUBLIC : Attr::PRIVATE;
Say(name,
WithSeverity(
- "The accessibility of '%s' has already been specified as %s"_en_US,
+ "The accessibility of '%s' has already been specified as %s"_warn_en_US,
attr != prev ? parser::Severity::Error : parser::Severity::Warning),
MakeOpName(name), EnumToString(prev));
} else {
diff --git a/flang/lib/Semantics/semantics.cpp b/flang/lib/Semantics/semantics.cpp
index 09bfd5e823110..fc59a17fbbbea 100644
--- a/flang/lib/Semantics/semantics.cpp
+++ b/flang/lib/Semantics/semantics.cpp
@@ -271,8 +271,8 @@ void SemanticsContext::CheckIndexVarRedefine(const parser::CharBlock &location,
void SemanticsContext::WarnIndexVarRedefine(
const parser::CharBlock &location, const Symbol &variable) {
- CheckIndexVarRedefine(
- location, variable, "Possible redefinition of %s variable '%s'"_en_US);
+ CheckIndexVarRedefine(location, variable,
+ "Possible redefinition of %s variable '%s'"_warn_en_US);
}
void SemanticsContext::CheckIndexVarRedefine(
diff --git a/flang/test/Driver/fixed-free-flag.f90 b/flang/test/Driver/fixed-free-flag.f90
index 265d8fcaf3b8a..b57e1c3554655 100644
--- a/flang/test/Driver/fixed-free-flag.f90
+++ b/flang/test/Driver/fixed-free-flag.f90
@@ -20,4 +20,4 @@
!-------------------------------------
! EXPECTED OUTPUT FOR FIXED FORM MODE
!-------------------------------------
-! FIXEDFORM:free-form-test.f90:1:1: Character in fixed-form label field must be a digit
+! FIXEDFORM:free-form-test.f90:1:1: warning: Character in fixed-form label field must be a digit
diff --git a/flang/test/Evaluate/folding03.f90 b/flang/test/Evaluate/folding03.f90
index 47f8ec090df3b..ed2ab8e83bab6 100644
--- a/flang/test/Evaluate/folding03.f90
+++ b/flang/test/Evaluate/folding03.f90
@@ -15,32 +15,32 @@ module integer_tests
! Integer division by zero are not tested here because they are handled as fatal
! errors in constants.
- !WARN: INTEGER(4) negation overflowed
+ !WARN: warning: INTEGER(4) negation overflowed
logical, parameter :: test_overflow_unary_minus1 = (-i4_nmax).EQ.i4_nmax
logical, parameter :: test_no_overflow_unary_minus1 = (-i4_pmax).EQ.(i4_nmax+1_4)
logical, parameter :: test_no_overflow_unary_plus1 = (+i4_pmax).EQ.i4_pmax
logical, parameter :: test_no_overflow_unary_plus2 = (+i4_nmax).EQ.i4_nmax
- !WARN: INTEGER(4) addition overflowed
+ !WARN: warning: INTEGER(4) addition overflowed
logical, parameter :: test_overflow_add1 = (i4_pmax+1_4).EQ.i4_nmax
- !WARN: INTEGER(4) addition overflowed
+ !WARN: warning: INTEGER(4) addition overflowed
logical, parameter :: test_overflow_add2 = (i4_nmax + (-1_4)).EQ.i4_pmax
- !WARN: INTEGER(4) addition overflowed
+ !WARN: warning: INTEGER(4) addition overflowed
logical, parameter :: test_overflow_add3 = (i4_pmax + i4_pmax).EQ.(-2_4)
- !WARN: INTEGER(4) addition overflowed
+ !WARN: warning: INTEGER(4) addition overflowed
logical, parameter :: test_overflow_add4 = (i4_nmax + i4_nmax).EQ.(0_4)
logical, parameter :: test_no_overflow_add1 = (i4_pmax + 0_4).EQ.i4_pmax
logical, parameter :: test_no_overflow_add2 = (i4_nmax + (-0_4)).EQ.i4_nmax
logical, parameter :: test_no_overflow_add3 = (i4_pmax + i4_nmax).EQ.(-1_4)
logical, parameter :: test_no_overflow_add4 = (i4_nmax + i4_pmax).EQ.(-1_4)
- !WARN: INTEGER(4) subtraction overflowed
+ !WARN: warning: INTEGER(4) subtraction overflowed
logical, parameter :: test_overflow_sub1 = (i4_nmax - 1_4).EQ.i4_pmax
- !WARN: INTEGER(4) subtraction overflowed
+ !WARN: warning: INTEGER(4) subtraction overflowed
logical, parameter :: test_overflow_sub2 = (i4_pmax - (-1_4)).EQ.i4_nmax
- !WARN: INTEGER(4) subtraction overflowed
+ !WARN: warning: INTEGER(4) subtraction overflowed
logical, parameter :: test_overflow_sub3 = (i4_nmax - i4_pmax).EQ.(1_4)
- !WARN: INTEGER(4) subtraction overflowed
+ !WARN: warning: INTEGER(4) subtraction overflowed
logical, parameter :: test_overflow_sub4 = (i4_pmax - i4_nmax).EQ.(-1_4)
logical, parameter :: test_no_overflow_sub1 = (i4_nmax - 0_4).EQ.i4_nmax
logical, parameter :: test_no_overflow_sub2 = (i4_pmax - (-0_4)).EQ.i4_pmax
@@ -48,23 +48,23 @@ module integer_tests
logical, parameter :: test_no_overflow_sub4 = (i4_pmax - i4_pmax).EQ.0_4
- !WARN: INTEGER(4) multiplication overflowed
+ !WARN: warning: INTEGER(4) multiplication overflowed
logical, parameter :: test_overflow_mult1 = (i4_pmax*2_4).EQ.(-2_4)
- !WARN: INTEGER(4) multiplication overflowed
+ !WARN: warning: INTEGER(4) multiplication overflowed
logical, parameter :: test_overflow_mult2 = (i4_nmax*2_4).EQ.(0_4)
- !WARN: INTEGER(4) multiplication overflowed
+ !WARN: warning: INTEGER(4) multiplication overflowed
logical, parameter :: test_overflow_mult3 = (i4_nmax*i4_nmax).EQ.(0_4)
- !WARN: INTEGER(4) multiplication overflowed
+ !WARN: warning: INTEGER(4) multiplication overflowed
logical, parameter :: test_overflow_mult4 = (i4_pmax*i4_pmax).EQ.(1_4)
- !WARN: INTEGER(4) division overflowed
+ !WARN: warning: INTEGER(4) division overflowed
logical, parameter :: test_overflow_div1 = (i4_nmax/(-1_4)).EQ.(i4_nmax)
logical, parameter :: test_no_overflow_div1 = (i4_nmax/(-2_4)).EQ.(1_4 + i4_pmax/2_4)
logical, parameter :: test_no_overflow_div2 = (i4_nmax/i4_nmax).EQ.(1_4)
- !WARN: INTEGER(4) power overflowed
+ !WARN: warning: INTEGER(4) power overflowed
logical, parameter :: test_overflow_pow1 = (i4_pmax**2_4).EQ.(1_4)
- !WARN: INTEGER(4) power overflowed
+ !WARN: warning: INTEGER(4) power overflowed
logical, parameter :: test_overflow_pow3 = (i4_nmax**2_4).EQ.(0_4)
logical, parameter :: test_no_overflow_pow1 = ((-1_4)**i4_nmax).EQ.(1_4)
logical, parameter :: test_no_overflow_pow2 = ((-1_4)**i4_pmax).EQ.(-1_4)
@@ -76,12 +76,12 @@ module real_tests
real(4), parameter :: r4_pmax = 3.4028235E38
real(4), parameter :: r4_nmax = -3.4028235E38
- !WARN: invalid argument on division
+ !WARN: warning: invalid argument on division
real(4), parameter :: r4_nan = 0._4/0._4
TEST_ISNAN(r4_nan)
- !WARN: division by zero
+ !WARN: warning: division by zero
real(4), parameter :: r4_pinf = 1._4/0._4
- !WARN: division by zero
+ !WARN: warning: division by zero
real(4), parameter :: r4_ninf = -1._4/0._4
logical, parameter :: test_r4_nan_parentheses1 = .NOT.(((r4_nan)).EQ.r4_nan)
@@ -104,13 +104,13 @@ module real_tests
real(4), parameter :: r4_nan_plus = (+r4_nan)
TEST_ISNAN(r4_nan_plus)
- !WARN: overflow on addition
+ !WARN: warning: overflow on addition
logical, parameter :: test_inf_r4_add9 = (r4_pmax + r4_pmax).eq.(r4_pinf)
- !WARN: overflow on addition
+ !WARN: warning: overflow on addition
logical, parameter :: test_inf_r4_add10 = (r4_nmax + r4_nmax).eq.(r4_ninf)
- !WARN: overflow on subtraction
+ !WARN: warning: overflow on subtraction
logical, parameter :: test_inf_r4_sub9 = (r4_pmax - r4_nmax).eq.(r4_pinf)
- !WARN: overflow on subtraction
+ !WARN: warning: overflow on subtraction
logical, parameter :: test_inf_r4_sub10 = (r4_nmax - r4_pmax).eq.(r4_ninf)
! No warnings expected below (inf propagation).
@@ -123,16 +123,16 @@ module real_tests
logical, parameter :: test_inf_r4_add7 = (r4_ninf + 0._4).EQ.(r4_ninf)
logical, parameter :: test_inf_r4_add8 = (r4_pinf + 0._4).EQ.(r4_pinf)
- !WARN: invalid argument on subtraction
+ !WARN: warning: invalid argument on subtraction
real(4), parameter :: r4_nan_sub1 = r4_pinf - r4_pinf
TEST_ISNAN(r4_nan_sub1)
- !WARN: invalid argument on subtraction
+ !WARN: warning: invalid argument on subtraction
real(4), parameter :: r4_nan_sub2 = r4_ninf - r4_ninf
TEST_ISNAN(r4_nan_sub2)
- !WARN: invalid argument on addition
+ !WARN: warning: invalid argument on addition
real(4), parameter :: r4_nan_add1 = r4_ninf + r4_pinf
TEST_ISNAN(r4_nan_add1)
- !WARN: invalid argument on addition
+ !WARN: warning: invalid argument on addition
real(4), parameter :: r4_nan_add2 = r4_pinf + r4_ninf
TEST_ISNAN(r4_nan_add2)
@@ -154,13 +154,13 @@ module real_tests
real(4), parameter :: r4_nan_add6 = r4_nan + r4_nan
TEST_ISNAN(r4_nan_add6)
- !WARN: overflow on multiplication
+ !WARN: warning: overflow on multiplication
logical, parameter :: test_inf_r4_mult1 = (1.5_4*r4_pmax).eq.(r4_pinf)
- !WARN: overflow on multiplication
+ !WARN: warning: overflow on multiplication
logical, parameter :: test_inf_r4_mult2 = (1.5_4*r4_nmax).eq.(r4_ninf)
- !WARN: overflow on division
+ !WARN: warning: overflow on division
logical, parameter :: test_inf_r4_div1 = (r4_nmax/(-0.5_4)).eq.(r4_pinf)
- !WARN: overflow on division
+ !WARN: warning: overflow on division
logical, parameter :: test_inf_r4_div2 = (r4_pmax/(-0.5_4)).eq.(r4_ninf)
! No warnings expected below (inf propagation).
@@ -177,25 +177,25 @@ module real_tests
logical, parameter :: test_inf_r4_div9 = (r4_nmax/r4_pinf).EQ.(0.)
logical, parameter :: test_inf_r4_div10 = (r4_nmax/r4_ninf).EQ.(0.)
- !WARN: invalid argument on division
+ !WARN: warning: invalid argument on division
real(4), parameter :: r4_nan_div1 = 0._4/0._4
TEST_ISNAN(r4_nan_div1)
- !WARN: invalid argument on division
+ !WARN: warning: invalid argument on division
real(4), parameter :: r4_nan_div2 = r4_ninf/r4_ninf
TEST_ISNAN(r4_nan_div2)
- !WARN: invalid argument on division
+ !WARN: warning: invalid argument on division
real(4), parameter :: r4_nan_div3 = r4_ninf/r4_pinf
TEST_ISNAN(r4_nan_div3)
- !WARN: invalid argument on division
+ !WARN: warning: invalid argument on division
real(4), parameter :: r4_nan_div4 = r4_pinf/r4_ninf
TEST_ISNAN(r4_nan_div4)
- !WARN: invalid argument on division
+ !WARN: warning: invalid argument on division
real(4), parameter :: r4_nan_div5 = r4_pinf/r4_pinf
TEST_ISNAN(r4_nan_div5)
- !WARN: invalid argument on multiplication
+ !WARN: warning: invalid argument on multiplication
real(4), parameter :: r4_nan_mult1 = r4_pinf*0._4
TEST_ISNAN(r4_nan_mult1)
- !WARN: invalid argument on multiplication
+ !WARN: warning: invalid argument on multiplication
real(4), parameter :: r4_nan_mult2 = 0._4*r4_ninf
TEST_ISNAN(r4_nan_mult2)
diff --git a/flang/test/Evaluate/folding04.f90 b/flang/test/Evaluate/folding04.f90
index 254a6531ae398..4e69eeb44f1b9 100644
--- a/flang/test/Evaluate/folding04.f90
+++ b/flang/test/Evaluate/folding04.f90
@@ -10,30 +10,30 @@ module real_tests
real(4), parameter :: r4_pmax = 3.4028235E38
real(4), parameter :: r4_nmax = -3.4028235E38
- !WARN: invalid argument on division
+ !WARN: warning: invalid argument on division
real(4), parameter :: r4_nan = 0._4/0._4
- !WARN: division by zero
+ !WARN: warning: division by zero
real(4), parameter :: r4_pinf = 1._4/0._4
- !WARN: division by zero
+ !WARN: warning: division by zero
real(4), parameter :: r4_ninf = -1._4/0._4
- !WARN: invalid argument on intrinsic function
+ !WARN: warning: invalid argument on intrinsic function
real(4), parameter :: nan_r4_acos1 = acos(1.1)
TEST_ISNAN(nan_r4_acos1)
- !WARN: invalid argument on intrinsic function
+ !WARN: warning: invalid argument on intrinsic function
real(4), parameter :: nan_r4_acos2 = acos(r4_pmax)
TEST_ISNAN(nan_r4_acos2)
- !WARN: invalid argument on intrinsic function
+ !WARN: warning: invalid argument on intrinsic function
real(4), parameter :: nan_r4_acos3 = acos(r4_nmax)
TEST_ISNAN(nan_r4_acos3)
- !WARN: invalid argument on intrinsic function
+ !WARN: warning: invalid argument on intrinsic function
real(4), parameter :: nan_r4_acos4 = acos(r4_ninf)
TEST_ISNAN(nan_r4_acos4)
- !WARN: invalid argument on intrinsic function
+ !WARN: warning: invalid argument on intrinsic function
real(4), parameter :: nan_r4_acos5 = acos(r4_pinf)
TEST_ISNAN(nan_r4_acos5)
- !WARN: overflow on intrinsic function
+ !WARN: warning: overflow on intrinsic function
logical, parameter :: test_exp_overflow = exp(256._4).EQ.r4_pinf
end module
@@ -53,15 +53,15 @@ module specific_extremums
! The tests below are cases where an implementation that converts the arguments to the
! standard required types instead would give
diff erent results than the implementation
! specified for f18 (converting the result).
- integer(8), parameter :: max_i32_8 = 2_8**31-1
+ integer(8), parameter :: max_i32_8 = 2_8**31-1
integer, parameter :: expected_min0 = int(min(max_i32_8, 2_8*max_i32_8), 4)
- !WARN: argument types do not match specific intrinsic 'min0' requirements; using 'min' generic instead and converting the result to INTEGER(4) if needed
+ !WARN: portability: argument types do not match specific intrinsic 'min0' requirements; using 'min' generic instead and converting the result to INTEGER(4) if needed
integer, parameter :: result_min0 = min0(max_i32_8, 2_8*max_i32_8)
! result_min0 would be -2 if arguments were converted to default integer.
logical, parameter :: test_min0 = expected_min0 .EQ. result_min0
real, parameter :: expected_amax0 = real(max(max_i32_8, 2_8*max_i32_8), 4)
- !WARN: argument types do not match specific intrinsic 'amax0' requirements; using 'max' generic instead and converting the result to REAL(4) if needed
+ !WARN: portability: argument types do not match specific intrinsic 'amax0' requirements; using 'max' generic instead and converting the result to REAL(4) if needed
real, parameter :: result_amax0 = amax0(max_i32_8, 2_8*max_i32_8)
! result_amax0 would be 2.1474836E+09 if arguments were converted to default integer first.
logical, parameter :: test_amax0 = expected_amax0 .EQ. result_amax0
diff --git a/flang/test/Evaluate/folding14.f90 b/flang/test/Evaluate/folding14.f90
index 1b949351a5149..2cf1c32f6cb3f 100644
--- a/flang/test/Evaluate/folding14.f90
+++ b/flang/test/Evaluate/folding14.f90
@@ -4,9 +4,9 @@ module m1
logical, parameter :: results(*) = isnan([ &
0., &
-0., &
-!WARN: division by zero
+!WARN: warning: division by zero
1./0., &
-!WARN: invalid argument on division
+!WARN: warning: invalid argument on division
0./0., &
real(z'7ff80001',kind=4), &
real(z'fff80001',kind=4), &
diff --git a/flang/test/Evaluate/folding28.f90 b/flang/test/Evaluate/folding28.f90
index dc7310be1296f..95db37abe8326 100644
--- a/flang/test/Evaluate/folding28.f90
+++ b/flang/test/Evaluate/folding28.f90
@@ -15,7 +15,7 @@ module m
! -0 (sqrt is -0)
real(8), parameter :: n08 = z'8000000000000000'
real(8), parameter :: sqrt_n08 = sqrt(n08)
-!WARN: division by zero
+ !WARN: warning: division by zero
real(8), parameter :: inf_n08 = 1.0_8 / sqrt_n08, inf_n08z = z'fff0000000000000'
logical, parameter :: test_n08 = inf_n08 == inf_n08z
! min normal
diff --git a/flang/test/Frontend/prescanner-diag.f90 b/flang/test/Frontend/prescanner-diag.f90
index f432872d162b2..079497774437b 100644
--- a/flang/test/Frontend/prescanner-diag.f90
+++ b/flang/test/Frontend/prescanner-diag.f90
@@ -18,8 +18,8 @@
!-----------------------
! EXPECTED OUTPUT
!-----------------------
-! CHECK: prescanner-diag.f90:27:20: #include: extra stuff ignored after file name
-! CHECK: prescanner-diag.f90:28:20: #include: extra stuff ignored after file name
+! CHECK: prescanner-diag.f90:27:20: portability: #include: extra stuff ignored after file name
+! CHECK: prescanner-diag.f90:28:20: portability: #include: extra stuff ignored after file name
!-------
! INPUT
diff --git a/flang/test/Preprocessing/include-comment.F90 b/flang/test/Preprocessing/include-comment.F90
index 239d9b7cc2e3e..5997a52292a5f 100644
--- a/flang/test/Preprocessing/include-comment.F90
+++ b/flang/test/Preprocessing/include-comment.F90
@@ -5,7 +5,7 @@
#include <empty.h> /* comment */
! CHECK-NOT: :7:
#include <empty.h> !comment
-! CHECK: :9:20: #include: extra stuff ignored after file name
+! CHECK: :9:20: portability: #include: extra stuff ignored after file name
#include <empty.h> comment
! CHECK-NOT: :11:
#include "empty.h" ! comment
@@ -13,6 +13,6 @@
#include "empty.h" /* comment */
! CHECK-NOT: :15:
#include "empty.h" !comment
-! CHECK: :17:20: #include: extra stuff ignored after file name
+! CHECK: :17:20: portability: #include: extra stuff ignored after file name
#include "empty.h" comment
end
diff --git a/flang/test/Semantics/call25.f90 b/flang/test/Semantics/call25.f90
index 746c40263bd7b..66bd7fcc5da4f 100644
--- a/flang/test/Semantics/call25.f90
+++ b/flang/test/Semantics/call25.f90
@@ -43,7 +43,7 @@ program main
call subr2(notChar)
call subr3(explicitLength)
call subr3(assumedLength)
- !CHECK: Warning: if the procedure's interface were explicit, this reference would be in error:
+ !CHECK: warning: If the procedure's interface were explicit, this reference would be in error:
!CHECK: Actual argument function associated with procedure dummy argument 'f=' has incompatible result type
call subr3(notChar)
end program
More information about the flang-commits
mailing list