13#ifndef FORTRAN_SEMANTICS_OPENMP_UTILS_H
14#define FORTRAN_SEMANTICS_OPENMP_UTILS_H
16#include "flang/Evaluate/type.h"
17#include "flang/Parser/char-block.h"
18#include "flang/Parser/parse-tree.h"
19#include "flang/Semantics/tools.h"
21#include "llvm/ADT/ArrayRef.h"
28namespace Fortran::semantics {
34template <
typename T,
typename U = std::remove_const_t<T>> U AsRvalue(T &t) {
38template <
typename T> T &&AsRvalue(T &&t) {
return std::move(t); }
40const Scope &GetScopingUnit(
const Scope &scope);
49 operator bool()
const {
return stmt !=
nullptr; }
55std::string ThisVersion(
unsigned version);
56std::string TryVersion(
unsigned version);
63std::optional<parser::CharBlock> GetObjectSource(
68bool IsCommonBlock(
const Symbol &sym);
69bool IsExtendedListItem(
const Symbol &sym);
70bool IsVariableListItem(
const Symbol &sym);
71bool IsVarOrFunctionRef(
const MaybeExpr &expr);
73bool IsMapEnteringType(parser::OmpMapType::Value type);
74bool IsMapExitingType(parser::OmpMapType::Value type);
76std::optional<SomeExpr> GetEvaluateExpr(
const parser::Expr &parserExpr);
77std::optional<evaluate::DynamicType> GetDynamicType(
80std::optional<bool> GetLogicalValue(
const SomeExpr &expr);
82std::optional<bool> IsContiguous(
85std::vector<SomeExpr> GetAllDesignators(
const SomeExpr &expr);
86const SomeExpr *HasStorageOverlap(
90const parser::Block &GetInnermostExecPart(
const parser::Block &block);
91bool IsStrictlyStructuredBlock(
const parser::Block &block);
Definition expression.h:878
Definition char-block.h:28
Definition semantics.h:67
Definition parse-tree.h:490
Definition parse-tree.h:1912
Definition parse-tree.h:1819
Definition parse-tree.h:1858
Definition parse-tree.h:547
Definition parse-tree.h:1701
Definition parse-tree.h:3508
Definition parse-tree.h:3596
Definition openmp-utils.h:45