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
{
29 class SemanticsContext
;
31 // Argument treatingExternalAsImplicit should be true when the called procedure
32 // does not actually have an explicit interface at the call site, but
33 // its characteristics are known because it is a subroutine or function
34 // defined at the top level in the same source file. Returns false if
35 // messages were created, true if all is well.
36 bool CheckArguments(const evaluate::characteristics::Procedure
&,
37 evaluate::ActualArguments
&, SemanticsContext
&, const Scope
&,
38 bool treatingExternalAsImplicit
, bool ignoreImplicitVsExplicit
,
39 const evaluate::SpecificIntrinsic
*intrinsic
);
41 bool CheckPPCIntrinsic(const Symbol
&generic
, const Symbol
&specific
,
42 const evaluate::ActualArguments
&actuals
,
43 evaluate::FoldingContext
&context
);
44 bool CheckWindowsIntrinsic(
45 const Symbol
&intrinsic
, evaluate::FoldingContext
&context
);
46 bool CheckArgumentIsConstantExprInRange(
47 const evaluate::ActualArguments
&actuals
, int index
, int lowerBound
,
48 int upperBound
, parser::ContextualMessages
&messages
);
50 // Checks actual arguments for the purpose of resolving a generic interface.
51 bool CheckInterfaceForGeneric(const evaluate::characteristics::Procedure
&,
52 evaluate::ActualArguments
&, SemanticsContext
&,
53 bool allowActualArgumentConversions
= false);
54 } // namespace Fortran::semantics