9#ifndef FORTRAN_SEMANTICS_DEFINABLE_H_
10#define FORTRAN_SEMANTICS_DEFINABLE_H_
16#include "flang/Common/enum-set.h"
17#include "flang/Common/idioms.h"
18#include "flang/Evaluate/expression.h"
19#include "flang/Parser/char-block.h"
20#include "flang/Parser/message.h"
23namespace Fortran::semantics {
28ENUM_CLASS(DefinabilityFlag,
36 AllowEventLockOrNotifyType)
38using DefinabilityFlags =
39 common::EnumSet<DefinabilityFlag, DefinabilityFlag_enumSize>;
46std::optional<parser::Message> WhyNotDefinable(
47 parser::CharBlock,
const Scope &, DefinabilityFlags,
const Symbol &);
48std::optional<parser::Message> WhyNotDefinable(parser::CharBlock,
const Scope &,
49 DefinabilityFlags,
const evaluate::Expr<evaluate::SomeType> &);
54const char *WhyBaseObjectIsSuspicious(
const Symbol &,
const Scope &);