forked from OSchip/llvm-project
[flang] Add name match checks for interface procedures
We had neglected to check for name mismatches for procedure definitions that appear in interfaces. I also changed label11.f90 to an error test since I think they're better than "FileCheck" tests. Differential Revision: https://reviews.llvm.org/D89611
This commit is contained in:
parent
cf814fcd39
commit
0047f6aed3
|
@ -355,12 +355,20 @@ public:
|
|||
std::get<parser::Statement<parser::EndBlockDataStmt>>(blockData.t));
|
||||
}
|
||||
|
||||
// C1564
|
||||
void Post(const parser::InterfaceBody::Function &func) {
|
||||
CheckOptionalName<parser::FunctionStmt>("FUNCTION", func,
|
||||
std::get<parser::Statement<parser::EndFunctionStmt>>(func.t));
|
||||
}
|
||||
|
||||
// C1564
|
||||
void Post(const parser::FunctionSubprogram &functionSubprogram) {
|
||||
CheckOptionalName<parser::FunctionStmt>("FUNCTION", functionSubprogram,
|
||||
std::get<parser::Statement<parser::EndFunctionStmt>>(
|
||||
functionSubprogram.t));
|
||||
}
|
||||
|
||||
// C1502
|
||||
void Post(const parser::InterfaceBlock &interfaceBlock) {
|
||||
auto &interfaceStmt{
|
||||
std::get<parser::Statement<parser::InterfaceStmt>>(interfaceBlock.t)};
|
||||
|
@ -381,7 +389,7 @@ public:
|
|||
context_
|
||||
.Say(currentPosition_,
|
||||
parser::MessageFormattedText{
|
||||
"INTERFACE generic-name (%s) mismatch"_en_US,
|
||||
"INTERFACE generic-name (%s) mismatch"_err_en_US,
|
||||
namePointer->source})
|
||||
.Attach(interfaceStmt.source, "mismatched INTERFACE"_en_US);
|
||||
}
|
||||
|
@ -432,6 +440,12 @@ public:
|
|||
std::get<parser::Statement<parser::EndSubmoduleStmt>>(submodule.t));
|
||||
}
|
||||
|
||||
// C1567
|
||||
void Post(const parser::InterfaceBody::Subroutine &sub) {
|
||||
CheckOptionalName<parser::SubroutineStmt>("SUBROUTINE", sub,
|
||||
std::get<parser::Statement<parser::EndSubroutineStmt>>(sub.t));
|
||||
}
|
||||
|
||||
// C1567
|
||||
void Post(const parser::SubroutineSubprogram &subroutineSubprogram) {
|
||||
CheckOptionalName<parser::SubroutineStmt>("SUBROUTINE",
|
||||
|
|
|
@ -1,39 +1,66 @@
|
|||
! RUN: not %f18 -funparse-with-symbols %s 2>&1 | FileCheck %s
|
||||
! CHECK: BLOCK DATA subprogram name mismatch
|
||||
! CHECK: should be
|
||||
! CHECK: FUNCTION name mismatch
|
||||
! CHECK: SUBROUTINE name mismatch
|
||||
! CHECK: PROGRAM name mismatch
|
||||
! CHECK: SUBMODULE name mismatch
|
||||
! CHECK: INTERFACE generic-name (t7) mismatch
|
||||
! CHECK: mismatched INTERFACE
|
||||
! CHECK: derived type definition name mismatch
|
||||
! CHECK: MODULE PROCEDURE name mismatch
|
||||
! CHECK: MODULE name mismatch
|
||||
! RUN: %S/test_errors.sh %s %t %f18
|
||||
! C739 If END TYPE is followed by a type-name, the type-name shall be the
|
||||
! same as that in the corresponding derived-type-stmt.
|
||||
! C1401 The program-name shall not be included in the end-program-stmt unless
|
||||
! the optional program-stmt is used. If included, it shall be identical to the
|
||||
! program-name specified in the program-stmt.
|
||||
! C1402 If the module-name is specified in the end-module-stmt, it shall be
|
||||
! identical to the module-name specified in the module-stmt.
|
||||
! C1413 If a submodule-name appears in the end-submodule-stmt, it shall be
|
||||
! identical to the one in the submodule-stmt.
|
||||
! C1414 If a function-name appears in the end-function-stmt, it shall be
|
||||
! identical to the function-name specified in the function-stmt.
|
||||
! C1502 If the end-interface-stmt includes a generic-spec, the interface-stmt
|
||||
! shall specify the same generic-spec
|
||||
! C1564 If a function-name appears in the end-function-stmt, it shall be
|
||||
! identical to the function-name specified in the function-stmt.
|
||||
! C1567 If a submodule-name appears in the end-submodule-stmt, it shall be
|
||||
! identical to the one in the submodule-stmt.
|
||||
! C1569 If the module-name is specified in the end-module-stmt, it shall be
|
||||
! identical to the module-name specified in the module-stmt
|
||||
|
||||
block data t1
|
||||
!ERROR: BLOCK DATA subprogram name mismatch
|
||||
end block data t2
|
||||
|
||||
function t3
|
||||
!ERROR: FUNCTION name mismatch
|
||||
end function t4
|
||||
|
||||
subroutine t9
|
||||
!ERROR: SUBROUTINE name mismatch
|
||||
end subroutine t10
|
||||
|
||||
program t13
|
||||
!ERROR: END PROGRAM name mismatch
|
||||
end program t14
|
||||
|
||||
submodule (mod) t15
|
||||
!ERROR: SUBMODULE name mismatch
|
||||
end submodule t16
|
||||
|
||||
module t5
|
||||
interface t7
|
||||
!ERROR: INTERFACE generic-name (t7) mismatch
|
||||
end interface t8
|
||||
type t17
|
||||
!ERROR: derived type definition name mismatch
|
||||
end type t18
|
||||
|
||||
abstract interface
|
||||
subroutine subrFront()
|
||||
!ERROR: SUBROUTINE name mismatch
|
||||
end subroutine subrBack
|
||||
function funcFront(x)
|
||||
real, intent(in) :: x
|
||||
real funcFront
|
||||
!ERROR: FUNCTION name mismatch
|
||||
end function funcBack
|
||||
end interface
|
||||
|
||||
contains
|
||||
module procedure t11
|
||||
!ERROR: MODULE PROCEDURE name mismatch
|
||||
end procedure t12
|
||||
!ERROR: MODULE name mismatch
|
||||
end module mox
|
||||
|
|
Loading…
Reference in New Issue