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