Index: flang/include/flang/Common/Fortran.h =================================================================== --- flang/include/flang/Common/Fortran.h +++ 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_ Index: flang/lib/Semantics/check-declarations.cpp =================================================================== --- flang/lib/Semantics/check-declarations.cpp +++ flang/lib/Semantics/check-declarations.cpp @@ -198,6 +198,13 @@ } 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"_err_en_US, + symbol.name(), symbol.name().size(), common::maxNameLen); + context_.SetError(symbol); + } if (context_.HasError(symbol)) { return; } Index: flang/test/Semantics/long-name.f90 =================================================================== --- /dev/null +++ flang/test/Semantics/long-name.f90 @@ -0,0 +1,14 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 + +!ERROR: aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggg1 has length 64, which is greater than the maximum name length 63 +program aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggg1 + + !ERROR: aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggg2 has length 64, which is greater than the maximum name length 63 + integer :: aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggg2 + + integer :: aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggg + + !ERROR: aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggg3 has length 64, which is greater than the maximum name length 63 + call aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggg3 + +end