diff --git a/flang/include/flang/Common/Fortran.h b/flang/include/flang/Common/Fortran.h --- a/flang/include/flang/Common/Fortran.h +++ b/flang/include/flang/Common/Fortran.h @@ -72,5 +72,8 @@ // Fortran arrays may have up to 15 dimensions (See Fortran 2018 section 5.4.6). static constexpr int maxRank{15}; + +// Fortran names may have up to 63 characters (See Fortran 2018 C601). +static constexpr int maxNameLen{63}; } // namespace Fortran::common #endif // FORTRAN_COMMON_FORTRAN_H_ diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp --- a/flang/lib/Semantics/check-declarations.cpp +++ b/flang/lib/Semantics/check-declarations.cpp @@ -198,6 +198,12 @@ } void CheckHelper::Check(const Symbol &symbol) { + if (symbol.name().size() > common::maxNameLen) { + messages_.Say(symbol.name(), + "%s has length %d, which is greater than the maximum name length " + "%d"_port_en_US, + symbol.name(), symbol.name().size(), common::maxNameLen); + } if (context_.HasError(symbol)) { return; }