Lines Matching full:characteristics
12 #include "flang/Evaluate/characteristics.h"
25 namespace characteristics = Fortran::evaluate::characteristics;
82 } else if (auto argChars{characteristics::DummyArgument::FromActual(
110 const characteristics::DummyDataObject &dummy) {
112 characteristics::TypeAndShape::Attr::AssumedRank) &&
114 characteristics::TypeAndShape::Attr::AssumedShape) &&
115 !dummy.attrs.test(characteristics::DummyDataObject::Attr::Allocatable) &&
116 !dummy.attrs.test(characteristics::DummyDataObject::Attr::Pointer) &&
125 const characteristics::DummyDataObject &dummy,
126 characteristics::TypeAndShape &actualType, SemanticsContext &context,
133 characteristics::DummyDataObject::Attr::DeducedFromActual)) {
137 characteristics::TypeAndShape::Attr::AssumedRank)) {
264 const characteristics::TypeAndShape &dummyType,
265 characteristics::TypeAndShape &actualType,
300 const characteristics::TypeAndShape &dummyType,
301 characteristics::TypeAndShape &actualType) {
329 static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy,
331 characteristics::TypeAndShape &actualType, bool isElemental,
335 const characteristics::Procedure &procedure,
343 dummy.attrs.test(characteristics::DummyDataObject::Attr::Allocatable)};
345 dummy.attrs.test(characteristics::DummyDataObject::Attr::Pointer)};
387 characteristics::TypeAndShape::Attr::AssumedRank)};
389 characteristics::TypeAndShape::Attr::AssumedSize)};
422 characteristics::TypeAndShape::Attr::AssumedShape) &&
424 characteristics::TypeAndShape::Attr::DeferredShape) &&
449 characteristics::TypeAndShape::Attr::AssumedSize)};
451 dummy.attrs.test(characteristics::DummyDataObject::Attr::Asynchronous)};
453 dummy.attrs.test(characteristics::DummyDataObject::Attr::Volatile)};
455 dummy.attrs.test(characteristics::DummyDataObject::Attr::Value)};
543 characteristics::TypeAndShape::Attr::AssumedShape)) {
614 characteristics::DummyDataObject::Attr::DeducedFromActual)) {
693 dummy.attrs.test(characteristics::DummyDataObject::Attr::Allocatable) &&
718 characteristics::DummyDataObject::Attr::Asynchronous)) {
722 characteristics::DummyDataObject::Attr::Volatile)) {
762 characteristics::TypeAndShape::Attr::AssumedShape)};
764 dummy.attrs.test(characteristics::DummyDataObject::Attr::Contiguous)};
785 dummy.attrs.test(characteristics::DummyDataObject::Attr::Optional)};
957 if (dummy.attrs.test(characteristics::DummyDataObject::Attr::Target) &&
980 !dummy.attrs.test(characteristics::DummyDataObject::Attr::Value) &&
995 characteristics::DummyDataObject::Attr::Allocatable) &&
996 !dummy.attrs.test(characteristics::DummyDataObject::Attr::Pointer)) {
1047 const characteristics::Procedure &proc,
1048 const characteristics::DummyProcedure &dummy, const std::string &dummyName,
1054 const characteristics::Procedure &interface { dummy.procedure.value() };
1057 dummy.attrs.test(characteristics::DummyProcedure::Attr::Pointer)};
1085 if (auto argChars{characteristics::DummyArgument::FromActual(
1090 std::get_if<characteristics::DummyProcedure>(&argChars->u)}) {
1091 characteristics::Procedure &argInterface{argProc->procedure.value()};
1093 characteristics::Procedure::Attr::NullPointer);
1097 characteristics::Procedure::Attr::Elemental);
1099 characteristics::Procedure::Attr::Elemental)) {
1107 characteristics::Procedure::Attr::NullPointer);
1167 characteristics::DummyProcedure::Attr::Optional)) {
1217 const characteristics::DummyArgument &dummy,
1218 const characteristics::Procedure &proc, SemanticsContext &context,
1242 [&](const characteristics::DummyDataObject &object) {
1246 if (auto type{characteristics::TypeAndShape::Characterize(
1260 } else if (object.type.attrs().test(characteristics::
1264 characteristics::DummyDataObject::Attr::Allocatable) ||
1266 characteristics::DummyDataObject::Attr::Pointer) ||
1267 !object.attrs.test(characteristics::DummyDataObject::
1271 } else if ((object.attrs.test(characteristics::DummyDataObject::
1273 object.attrs.test(characteristics::
1292 } else if (object.attrs.test(characteristics::DummyDataObject::
1320 } else if (object.type.attrs().test(characteristics::
1331 [&](const characteristics::DummyProcedure &dummy) {
1337 [&](const characteristics::AlternateReturn &) {
1344 static void RearrangeArguments(const characteristics::Procedure &proc,
1409 const characteristics::Procedure &proc, evaluate::ActualArguments &actuals,
1518 if (auto pointerProc{characteristics::Procedure::Characterize(
1522 if (auto targetProc{characteristics::Procedure::Characterize(
1672 static void CheckMaxMin(const characteristics::Procedure &proc,
1814 std::optional<characteristics::Procedure> procChars;
1819 procChars = characteristics::Procedure::Characterize(
1823 procChars = characteristics::Procedure::Characterize(*ref, context);
1833 } else if (procChars->attrs.test(characteristics::Procedure::Attr::BindC)) {
1844 const characteristics::DummyDataObject *data[2]{};
1847 data[j] = std::get_if<characteristics::DummyDataObject>(&dummy.u);
1855 characteristics::DummyDataObject::Attr::Optional) ||
1857 characteristics::DummyDataObject::Attr::Allocatable) ||
1859 characteristics::DummyDataObject::Attr::Pointer) ||
1867 static constexpr characteristics::DummyDataObject::Attr attrs[]{
1868 characteristics::DummyDataObject::Attr::Asynchronous,
1869 characteristics::DummyDataObject::Attr::Target,
1870 characteristics::DummyDataObject::Attr::Value,
1938 if (auto source{characteristics::TypeAndShape::Characterize(
1941 if (auto mold{characteristics::TypeAndShape::Characterize(
1980 static void CheckSpecificIntrinsic(const characteristics::Procedure &proc,
2005 const characteristics::Procedure &proc, evaluate::ActualArguments &actuals,
2048 bool CheckInterfaceForGeneric(const characteristics::Procedure &proc,
2125 auto type{characteristics::TypeAndShape::Characterize(*expr, context)};
2160 bool CheckArguments(const characteristics::Procedure &proc,