1 | //===-- lib/Semantics/check-call.h ------------------------------*- C++ -*-===// |
2 | // |
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 |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | // Constraint checking for procedure references |
10 | |
11 | #ifndef FORTRAN_SEMANTICS_CHECK_CALL_H_ |
12 | #define FORTRAN_SEMANTICS_CHECK_CALL_H_ |
13 | |
14 | #include "flang/Evaluate/call.h" |
15 | |
16 | namespace Fortran::parser { |
17 | class Messages; |
18 | class ContextualMessages; |
19 | } // namespace Fortran::parser |
20 | namespace Fortran::evaluate::characteristics { |
21 | struct Procedure; |
22 | } |
23 | namespace Fortran::evaluate { |
24 | class FoldingContext; |
25 | } |
26 | |
27 | namespace Fortran::semantics { |
28 | class Scope; |
29 | class SemanticsContext; |
30 | |
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); |
40 | |
41 | bool CheckPPCIntrinsic(const Symbol &generic, const Symbol &specific, |
42 | const evaluate::ActualArguments &actuals, |
43 | evaluate::FoldingContext &context); |
44 | bool CheckArgumentIsConstantExprInRange( |
45 | const evaluate::ActualArguments &actuals, int index, int lowerBound, |
46 | int upperBound, parser::ContextualMessages &messages); |
47 | |
48 | // Checks actual arguments for the purpose of resolving a generic interface. |
49 | bool CheckInterfaceForGeneric(const evaluate::characteristics::Procedure &, |
50 | evaluate::ActualArguments &, SemanticsContext &, |
51 | bool allowActualArgumentConversions = false); |
52 | } // namespace Fortran::semantics |
53 | #endif |
54 | |