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 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); 49 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 55 #endif 56