1 //===-------lib/Semantics/check-data.h ------------------------------------===// 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 #ifndef FORTRAN_SEMANTICS_CHECK_DATA_H_ 10 #define FORTRAN_SEMANTICS_CHECK_DATA_H_ 11 12 #include "data-to-inits.h" 13 #include "flang/Common/interval.h" 14 #include "flang/Evaluate/fold-designator.h" 15 #include "flang/Evaluate/initial-image.h" 16 #include "flang/Semantics/expression.h" 17 #include "flang/Semantics/semantics.h" 18 #include <list> 19 #include <map> 20 #include <vector> 21 22 namespace Fortran::parser { 23 struct DataStmtRepeat; 24 struct DataStmtObject; 25 struct DataIDoObject; 26 class DataStmtImpliedDo; 27 struct DataStmtSet; 28 } // namespace Fortran::parser 29 30 namespace Fortran::semantics { 31 32 class DataChecker : public virtual BaseChecker { 33 public: DataChecker(SemanticsContext & context)34 explicit DataChecker(SemanticsContext &context) : exprAnalyzer_{context} {} 35 void Leave(const parser::DataStmtObject &); 36 void Leave(const parser::DataIDoObject &); 37 void Enter(const parser::DataImpliedDo &); 38 void Leave(const parser::DataImpliedDo &); 39 void Leave(const parser::DataStmtSet &); 40 41 // After all DATA statements have been processed, converts their 42 // initializations into per-symbol static initializers. 43 void CompileDataInitializationsIntoInitializers(); 44 45 private: 46 ConstantSubscript GetRepetitionCount(const parser::DataStmtRepeat &); 47 template <typename T> void CheckIfConstantSubscript(const T &); 48 void CheckSubscript(const parser::SectionSubscript &); 49 bool CheckAllSubscriptsInDataRef(const parser::DataRef &, parser::CharBlock); 50 51 DataInitializations inits_; 52 evaluate::ExpressionAnalyzer exprAnalyzer_; 53 bool currentSetHasFatalErrors_{false}; 54 }; 55 } // namespace Fortran::semantics 56 #endif // FORTRAN_SEMANTICS_CHECK_DATA_H_ 57