diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -5341,6 +5341,9 @@ } else if (attrs.test(Attr::BIND_C)) { Say(name, "Variable '%s' with BIND attribute may not appear in a COMMON block"_err_en_US); + } else if (IsNamedConstant(*symbol)) { + Say(name, + "A named constant '%s' may not appear in a COMMON block"_err_en_US); } else if (IsDummy(*symbol)) { Say(name, "Dummy argument '%s' may not appear in a COMMON block"_err_en_US); diff --git a/flang/test/Semantics/declarations01.f90 b/flang/test/Semantics/declarations01.f90 --- a/flang/test/Semantics/declarations01.f90 +++ b/flang/test/Semantics/declarations01.f90 @@ -4,5 +4,10 @@ function f1() result(x) !ERROR: A function result may not also be a named constant integer, parameter :: x = 1 -end + integer, parameter :: x2 = 1 + integer :: x3 + !ERROR: A named constant 'x2' may not appear in a COMMON block + common /blk/ x2, x3 + +end