Mercurial > hg > CbC > CbC_llvm
view flang/lib/Semantics/check-do-forall.h @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | 0572611fdcc8 |
children |
line wrap: on
line source
//===-- lib/Semantics/check-do-forall.h -------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef FORTRAN_SEMANTICS_CHECK_DO_FORALL_H_ #define FORTRAN_SEMANTICS_CHECK_DO_FORALL_H_ #include "flang/Common/idioms.h" #include "flang/Semantics/semantics.h" namespace Fortran::parser { struct AssignmentStmt; struct CallStmt; struct ConnectSpec; struct CycleStmt; struct DoConstruct; struct ExitStmt; struct Expr; struct ForallAssignmentStmt; struct ForallConstruct; struct ForallStmt; struct InquireSpec; struct IoControlSpec; struct OutputImpliedDo; struct StatVariable; } // namespace Fortran::parser namespace Fortran::semantics { // To specify different statement types used in semantic checking. ENUM_CLASS(StmtType, CYCLE, EXIT) // Perform semantic checks on DO and FORALL constructs and statements. class DoForallChecker : public virtual BaseChecker { public: explicit DoForallChecker(SemanticsContext &context) : context_{context} {} void Leave(const parser::AssignmentStmt &); void Leave(const parser::CallStmt &); void Leave(const parser::ConnectSpec &); void Enter(const parser::CycleStmt &); void Enter(const parser::DoConstruct &); void Leave(const parser::DoConstruct &); void Enter(const parser::ForallConstruct &); void Leave(const parser::ForallConstruct &); void Enter(const parser::ForallStmt &); void Leave(const parser::ForallStmt &); void Leave(const parser::ForallAssignmentStmt &s); void Enter(const parser::ExitStmt &); void Enter(const parser::Expr &); void Leave(const parser::Expr &); void Leave(const parser::InquireSpec &); void Leave(const parser::IoControlSpec &); void Leave(const parser::OutputImpliedDo &); void Leave(const parser::StatVariable &); private: SemanticsContext &context_; int exprDepth_{0}; void SayBadLeave( StmtType, const char *enclosingStmt, const ConstructNode &) const; void CheckDoConcurrentExit(StmtType, const ConstructNode &) const; void CheckForBadLeave(StmtType, const ConstructNode &) const; void CheckNesting(StmtType, const parser::Name *) const; }; } // namespace Fortran::semantics #endif