Mercurial > hg > CbC > CbC_llvm
view flang/lib/Semantics/check-data.h @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | 79ff65ed7e25 |
children |
line wrap: on
line source
//===-------lib/Semantics/check-data.h ------------------------------------===// // // 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_DATA_H_ #define FORTRAN_SEMANTICS_CHECK_DATA_H_ #include "data-to-inits.h" #include "flang/Common/interval.h" #include "flang/Evaluate/fold-designator.h" #include "flang/Evaluate/initial-image.h" #include "flang/Semantics/expression.h" #include "flang/Semantics/semantics.h" #include <list> #include <map> #include <vector> namespace Fortran::parser { struct DataStmtRepeat; struct DataStmtObject; struct DataIDoObject; class DataStmtImpliedDo; struct DataStmtSet; } // namespace Fortran::parser namespace Fortran::semantics { class DataChecker : public virtual BaseChecker { public: explicit DataChecker(SemanticsContext &context) : exprAnalyzer_{context} {} void Leave(const parser::DataStmtObject &); void Leave(const parser::DataIDoObject &); void Enter(const parser::DataImpliedDo &); void Leave(const parser::DataImpliedDo &); void Leave(const parser::DataStmtSet &); // These cases are for legacy DATA-like /initializations/ void Leave(const parser::ComponentDecl &); void Leave(const parser::EntityDecl &); // After all DATA statements have been processed, converts their // initializations into per-symbol static initializers. void CompileDataInitializationsIntoInitializers(); private: ConstantSubscript GetRepetitionCount(const parser::DataStmtRepeat &); template <typename T> void CheckIfConstantSubscript(const T &); void CheckSubscript(const parser::SectionSubscript &); bool CheckAllSubscriptsInDataRef(const parser::DataRef &, parser::CharBlock); template <typename A> void LegacyDataInit(const A &); DataInitializations inits_; evaluate::ExpressionAnalyzer exprAnalyzer_; bool currentSetHasFatalErrors_{false}; }; } // namespace Fortran::semantics #endif // FORTRAN_SEMANTICS_CHECK_DATA_H_