13#ifndef FORTRAN_SEMANTICS_OPENMP_UTILS_H
14#define FORTRAN_SEMANTICS_OPENMP_UTILS_H
16#include "flang/Common/indirection.h"
17#include "flang/Evaluate/type.h"
18#include "flang/Parser/char-block.h"
19#include "flang/Parser/parse-tree.h"
20#include "flang/Parser/tools.h"
21#include "flang/Semantics/tools.h"
23#include "llvm/ADT/ArrayRef.h"
30namespace Fortran::semantics {
37template <
typename T,
typename U = std::remove_const_t<T>> U AsRvalue(T &t) {
41template <
typename T> T &&AsRvalue(T &&t) {
return std::move(t); }
43const Scope &GetScopingUnit(
const Scope &scope);
44const Scope &GetProgramUnit(
const Scope &scope);
53 operator bool()
const {
return stmt !=
nullptr; }
59std::string ThisVersion(
unsigned version);
60std::string TryVersion(
unsigned version);
67std::optional<parser::CharBlock> GetObjectSource(
72bool IsCommonBlock(
const Symbol &sym);
73bool IsExtendedListItem(
const Symbol &sym);
74bool IsVariableListItem(
const Symbol &sym);
75bool IsVarOrFunctionRef(
const MaybeExpr &expr);
77bool IsMapEnteringType(parser::OmpMapType::Value type);
78bool IsMapExitingType(parser::OmpMapType::Value type);
80MaybeExpr GetEvaluateExpr(
const parser::Expr &parserExpr);
81template <
typename T> MaybeExpr GetEvaluateExpr(
const T &inp) {
82 return GetEvaluateExpr(parser::UnwrapRef<parser::Expr>(inp));
85std::optional<evaluate::DynamicType> GetDynamicType(
88std::optional<bool> GetLogicalValue(
const SomeExpr &expr);
90std::optional<bool> IsContiguous(
93std::vector<SomeExpr> GetAllDesignators(
const SomeExpr &expr);
94const SomeExpr *HasStorageOverlap(
98const parser::Block &GetInnermostExecPart(
const parser::Block &block);
99bool IsStrictlyStructuredBlock(
const parser::Block &block);
Definition expression.h:878
Definition char-block.h:28
Definition semantics.h:67
Definition parse-tree.h:493
Definition parse-tree.h:1915
Definition parse-tree.h:1822
Definition parse-tree.h:1861
Definition parse-tree.h:550
Definition parse-tree.h:1704
Definition parse-tree.h:3529
Definition parse-tree.h:3660
Definition openmp-utils.h:49