1 //===-- lib/Semantics/check-call.h ------------------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // Constraint checking for procedure references
11 #ifndef FORTRAN_SEMANTICS_CHECK_CALL_H_
12 #define FORTRAN_SEMANTICS_CHECK_CALL_H_
14 #include "flang/Evaluate/call.h"
16 namespace Fortran::parser
{
18 class ContextualMessages
;
19 } // namespace Fortran::parser
20 namespace Fortran::evaluate::characteristics
{
23 namespace Fortran::evaluate
{
27 namespace Fortran::semantics
{
30 // Argument treatingExternalAsImplicit should be true when the called procedure
31 // does not actually have an explicit interface at the call site, but
32 // its characteristics are known because it is a subroutine or function
33 // defined at the top level in the same source file. Returns false if
34 // messages were created, true if all is well.
35 bool CheckArguments(const evaluate::characteristics::Procedure
&,
36 evaluate::ActualArguments
&, evaluate::FoldingContext
&, const Scope
&,
37 bool treatingExternalAsImplicit
,
38 const evaluate::SpecificIntrinsic
*intrinsic
);
40 // Checks actual arguments for the purpose of resolving a generic interface.
41 bool CheckInterfaceForGeneric(const evaluate::characteristics::Procedure
&,
42 evaluate::ActualArguments
&, const evaluate::FoldingContext
&,
43 bool allowActualArgumentConversions
= false);
44 } // namespace Fortran::semantics