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, PotentialDeallocation,
37 OnlyWarnOnImpureFinalInPureContext)
39using DefinabilityFlags =
40 common::EnumSet<DefinabilityFlag, DefinabilityFlag_enumSize>;
47std::optional<parser::Message> WhyNotDefinable(
48 parser::CharBlock,
const Scope &, DefinabilityFlags,
const Symbol &);
49std::optional<parser::Message> WhyNotDefinable(parser::CharBlock,
const Scope &,
50 DefinabilityFlags,
const evaluate::Expr<evaluate::SomeType> &);
55const char *WhyBaseObjectIsSuspicious(
const Symbol &,
const Scope &);