FLANG
check-data.h
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/Semantics/expression.h"
14#include "flang/Semantics/semantics.h"
15
16namespace Fortran::parser {
17struct DataStmtRepeat;
18struct DataStmtObject;
19struct DataIDoObject;
20class DataStmtImpliedDo;
21struct DataStmtSet;
22} // namespace Fortran::parser
23
24namespace Fortran::semantics {
25
26class DataChecker : public virtual BaseChecker {
27public:
28 explicit DataChecker(SemanticsContext &context) : exprAnalyzer_{context} {}
29 void Leave(const parser::DataStmtObject &);
30 void Leave(const parser::DataIDoObject &);
31 void Enter(const parser::DataImpliedDo &);
32 void Leave(const parser::DataImpliedDo &);
33 void Leave(const parser::DataStmtSet &);
34 void Leave(const parser::EntityDecl &);
35 // After all DATA statements have been processed, converts their
36 // initializations into per-symbol static initializers.
37 void CompileDataInitializationsIntoInitializers();
38
39private:
40 ConstantSubscript GetRepetitionCount(const parser::DataStmtRepeat &);
41 template <typename T> void CheckIfConstantSubscript(const T &);
42 void CheckSubscript(const parser::SectionSubscript &);
43 bool CheckAllSubscriptsInDataRef(const parser::DataRef &, parser::CharBlock);
44 template <typename A> void LegacyDataInit(const A &);
45
46 DataInitializations inits_;
47 evaluate::ExpressionAnalyzer exprAnalyzer_;
48 bool currentSetHasFatalErrors_{false};
49};
50} // namespace Fortran::semantics
51#endif // FORTRAN_SEMANTICS_CHECK_DATA_H_
Definition expression.h:100
Definition char-block.h:26
Definition semantics.h:67
Definition check-expression.h:19
Definition parse-tree.h:1538
Definition parse-tree.h:1550
Definition parse-tree.h:1848
Definition parse-tree.h:1558
Definition parse-tree.h:1524
Definition parse-tree.h:1564
Definition parse-tree.h:1422
Definition parse-tree.h:1693
Definition semantics.h:468