61 lines · c
1//===-- lib/Semantics/assignment.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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef FORTRAN_SEMANTICS_ASSIGNMENT_H_10#define FORTRAN_SEMANTICS_ASSIGNMENT_H_11 12#include "flang/Common/indirection.h"13#include "flang/Evaluate/expression.h"14#include "flang/Semantics/semantics.h"15 16namespace Fortran::parser {17class ContextualMessages;18struct AssignmentStmt;19struct EndWhereStmt;20struct MaskedElsewhereStmt;21struct PointerAssignmentStmt;22struct WhereConstructStmt;23struct WhereStmt;24} // namespace Fortran::parser25 26namespace Fortran::semantics {27 28class AssignmentContext;29class Scope;30class Symbol;31 32// Applies checks from C1594(5-6) on copying pointers in pure subprograms33bool CheckCopyabilityInPureScope(parser::ContextualMessages &,34 const evaluate::Expr<evaluate::SomeType> &, const Scope &);35 36class AssignmentChecker : public virtual BaseChecker {37public:38 explicit AssignmentChecker(SemanticsContext &);39 ~AssignmentChecker();40 void Enter(const parser::OpenMPDeclareReductionConstruct &x);41 void Enter(const parser::AssignmentStmt &);42 void Enter(const parser::PointerAssignmentStmt &);43 void Enter(const parser::WhereStmt &);44 void Leave(const parser::WhereStmt &);45 void Enter(const parser::WhereConstructStmt &);46 void Leave(const parser::EndWhereStmt &);47 void Enter(const parser::MaskedElsewhereStmt &);48 void Leave(const parser::MaskedElsewhereStmt &);49 50 SemanticsContext &context();51 52private:53 common::Indirection<AssignmentContext> context_;54};55 56} // namespace Fortran::semantics57 58extern template class Fortran::common::Indirection<59 Fortran::semantics::AssignmentContext>;60#endif // FORTRAN_SEMANTICS_ASSIGNMENT_H_61