• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- lib/Semantics/data-to-inits.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_DATA_TO_INITS_H_
10 #define FORTRAN_SEMANTICS_DATA_TO_INITS_H_
11 
12 #include "flang/Common/default-kinds.h"
13 #include "flang/Common/interval.h"
14 #include "flang/Evaluate/initial-image.h"
15 #include <list>
16 #include <map>
17 
18 namespace Fortran::parser {
19 struct DataStmtSet;
20 }
21 namespace Fortran::evaluate {
22 class ExpressionAnalyzer;
23 }
24 namespace Fortran::semantics {
25 
26 class Symbol;
27 
28 struct SymbolDataInitialization {
29   using Range = common::Interval<common::ConstantSubscript>;
SymbolDataInitializationSymbolDataInitialization30   explicit SymbolDataInitialization(std::size_t bytes) : image{bytes} {}
31   evaluate::InitialImage image;
32   std::list<Range> inits;
33 };
34 
35 using DataInitializations = std::map<const Symbol *, SymbolDataInitialization>;
36 
37 // Matches DATA statement variables with their values and checks
38 // compatibility.
39 void AccumulateDataInitializations(DataInitializations &,
40     evaluate::ExpressionAnalyzer &, const parser::DataStmtSet &);
41 
42 void ConvertToInitializers(
43     DataInitializations &, evaluate::ExpressionAnalyzer &);
44 
45 } // namespace Fortran::semantics
46 #endif // FORTRAN_SEMANTICS_DATA_TO_INITS_H_
47