[flang] Add -i8, -r8, &c. options to f18 development driver
Original-commit: flang-compiler/f18@ff7f338126562ce539879a59d3da5707c76ae11a
Reviewed-on: https://github.com/flang-compiler/f18/pull/213
diff --git a/flang/lib/evaluate/intrinsics.cc b/flang/lib/evaluate/intrinsics.cc
index ba774a0..39a7c70 100644
--- a/flang/lib/evaluate/intrinsics.cc
+++ b/flang/lib/evaluate/intrinsics.cc
@@ -87,11 +87,12 @@
// Abbreviations for argument and result patterns in the intrinsic prototypes:
// Match specific kinds of intrinsic types
-static constexpr TypePattern DftInt{IntType, KindCode::defaultIntegerKind};
-static constexpr TypePattern DftReal{RealType, KindCode::defaultRealKind};
-static constexpr TypePattern DftComplex{ComplexType, KindCode::defaultRealKind};
-static constexpr TypePattern DftChar{CharType, KindCode::defaultCharKind};
-static constexpr TypePattern DftLogical{
+static constexpr TypePattern DefaultInt{IntType, KindCode::defaultIntegerKind};
+static constexpr TypePattern DefaultReal{RealType, KindCode::defaultRealKind};
+static constexpr TypePattern DefaultComplex{
+ ComplexType, KindCode::defaultRealKind};
+static constexpr TypePattern DefaultChar{CharType, KindCode::defaultCharKind};
+static constexpr TypePattern DefaultLogical{
LogicalType, KindCode::defaultLogicalKind};
static constexpr TypePattern BOZ{IntType, KindCode::typeless};
static constexpr TypePattern TEAM_TYPE{IntType, KindCode::teamType};
@@ -160,6 +161,7 @@
ENUM_CLASS(Optionality, required, optional,
defaultsToSameKind, // for MatchingDefaultKIND
defaultsToDefaultForResult, // for DefaultingKIND
+ defaultsToSubscriptKind, // for SubscriptDefaultKIND
repeats, // for MAX/MIN and their several variants
)
@@ -183,6 +185,11 @@
static constexpr IntrinsicDummyArgument MatchingDefaultKIND{"kind",
{IntType, KindCode::kindArg}, Rank::scalar,
Optionality::defaultsToSameKind};
+// SubscriptDefaultKind is a KIND= argument whose default value is
+// the kind of INTEGER used for address calculations.
+static constexpr IntrinsicDummyArgument SubscriptDefaultKIND{"kind",
+ {IntType, KindCode::kindArg}, Rank::scalar,
+ Optionality::defaultsToSubscriptKind};
static constexpr IntrinsicDummyArgument OptionalDIM{
"dim", {IntType, KindCode::dimArg}, Rank::scalar, Optionality::optional};
static constexpr IntrinsicDummyArgument OptionalMASK{
@@ -247,20 +254,20 @@
{"bge",
{{"i", AnyInt, Rank::elementalOrBOZ},
{"j", AnyInt, Rank::elementalOrBOZ}},
- DftLogical},
+ DefaultLogical},
{"bgt",
{{"i", AnyInt, Rank::elementalOrBOZ},
{"j", AnyInt, Rank::elementalOrBOZ}},
- DftLogical},
+ DefaultLogical},
{"ble",
{{"i", AnyInt, Rank::elementalOrBOZ},
{"j", AnyInt, Rank::elementalOrBOZ}},
- DftLogical},
+ DefaultLogical},
{"blt",
{{"i", AnyInt, Rank::elementalOrBOZ},
{"j", AnyInt, Rank::elementalOrBOZ}},
- DftLogical},
- {"btest", {{"i", AnyInt}, {"pos", AnyInt}}, DftLogical},
+ DefaultLogical},
+ {"btest", {{"i", AnyInt}, {"pos", AnyInt}}, DefaultLogical},
{"ceiling", {{"a", AnyReal}, DefaultingKIND}, KINDInt},
{"char", {{"i", AnyInt}, DefaultingKIND}, KINDChar},
{"cmplx", {{"x", AnyComplex}, DefaultingKIND}, KINDComplex},
@@ -268,7 +275,7 @@
{{"x", SameIntOrReal, Rank::elementalOrBOZ},
{"y", SameIntOrReal, Rank::elementalOrBOZ}, DefaultingKIND},
KINDComplex},
- {"command_argument_count", {}, DftInt, Rank::scalar},
+ {"command_argument_count", {}, DefaultInt, Rank::scalar},
{"conjg", {{"z", SameComplex}}, SameComplex},
{"cos", {{"x", SameFloating}}, SameFloating},
{"cosh", {{"x", SameFloating}}, SameFloating},
@@ -291,7 +298,7 @@
{{"vector_a", AnyIntOrReal, Rank::vector},
{"vector_b", AnyNumeric, Rank::vector}},
ResultNumeric, Rank::scalar},
- {"dprod", {{"x", DftReal}, {"y", DftReal}}, DoublePrecision},
+ {"dprod", {{"x", DefaultReal}, {"y", DefaultReal}}, DoublePrecision},
{"dshiftl",
{{"i", SameInt}, {"j", SameInt, Rank::elementalOrBOZ},
{"shift", AnyInt}},
@@ -318,22 +325,22 @@
{"erfc", {{"x", SameReal}}, SameReal},
{"erfc_scaled", {{"x", SameReal}}, SameReal},
{"exp", {{"x", SameFloating}}, SameFloating},
- {"exponent", {{"x", AnyReal}}, DftInt},
+ {"exponent", {{"x", AnyReal}}, DefaultInt},
{"findloc",
{{"array", AnyNumeric, Rank::array},
{"value", AnyNumeric, Rank::scalar}, OptionalDIM, OptionalMASK,
- DefaultingKIND,
+ SubscriptDefaultKIND,
{"back", AnyLogical, Rank::scalar, Optionality::optional}},
KINDInt, Rank::dimReduced},
{"findloc",
{{"array", SameChar, Rank::array}, {"value", SameChar, Rank::scalar},
- OptionalDIM, OptionalMASK, DefaultingKIND,
+ OptionalDIM, OptionalMASK, SubscriptDefaultKIND,
{"back", AnyLogical, Rank::scalar, Optionality::optional}},
KINDInt, Rank::dimReduced},
{"findloc",
{{"array", AnyLogical, Rank::array},
{"value", AnyLogical, Rank::scalar}, OptionalDIM, OptionalMASK,
- DefaultingKIND,
+ SubscriptDefaultKIND,
{"back", AnyLogical, Rank::scalar, Optionality::optional}},
KINDInt, Rank::dimReduced},
{"floor", {{"a", AnyReal}, DefaultingKIND}, KINDInt},
@@ -358,11 +365,11 @@
{"image_status",
{{"image", SameInt},
{"team", TEAM_TYPE, Rank::scalar, Optionality::optional}},
- DftInt},
+ DefaultInt},
{"index",
{{"string", SameChar}, {"substring", SameChar},
{"back", AnyLogical, Rank::scalar, Optionality::optional},
- DefaultingKIND},
+ SubscriptDefaultKIND},
KINDInt},
{"int", {{"a", AnyNumeric, Rank::elementalOrBOZ}, DefaultingKIND}, KINDInt},
{"ior", {{"i", SameInt}, {"j", SameInt, Rank::elementalOrBOZ}}, SameInt},
@@ -372,21 +379,23 @@
{{"i", SameInt}, {"shift", AnyInt},
{"size", AnyInt, Rank::elemental, Optionality::optional}},
SameInt},
- {"is_iostat_end", {{"i", AnyInt}}, DftLogical},
- {"is_iostat_eor", {{"i", AnyInt}}, DftLogical},
- {"lbound", {{"array", Anything, Rank::anyOrAssumedRank}, DefaultingKIND},
+ {"is_iostat_end", {{"i", AnyInt}}, DefaultLogical},
+ {"is_iostat_eor", {{"i", AnyInt}}, DefaultLogical},
+ {"lbound",
+ {{"array", Anything, Rank::anyOrAssumedRank}, SubscriptDefaultKIND},
KINDInt, Rank::vector},
{"lbound",
{{"array", Anything, Rank::anyOrAssumedRank},
- {"dim", {IntType, KindCode::dimArg}, Rank::scalar}, DefaultingKIND},
+ {"dim", {IntType, KindCode::dimArg}, Rank::scalar},
+ SubscriptDefaultKIND},
KINDInt, Rank::scalar},
- {"leadz", {{"i", AnyInt}}, DftInt},
- {"len", {{"string", AnyChar}, DefaultingKIND}, KINDInt},
- {"len_trim", {{"string", AnyChar}, DefaultingKIND}, KINDInt},
- {"lge", {{"string_a", SameChar}, {"string_b", SameChar}}, DftLogical},
- {"lgt", {{"string_a", SameChar}, {"string_b", SameChar}}, DftLogical},
- {"lle", {{"string_a", SameChar}, {"string_b", SameChar}}, DftLogical},
- {"llt", {{"string_a", SameChar}, {"string_b", SameChar}}, DftLogical},
+ {"leadz", {{"i", AnyInt}}, DefaultInt},
+ {"len", {{"string", AnyChar}, SubscriptDefaultKIND}, KINDInt},
+ {"len_trim", {{"string", AnyChar}, SubscriptDefaultKIND}, KINDInt},
+ {"lge", {{"string_a", SameChar}, {"string_b", SameChar}}, DefaultLogical},
+ {"lgt", {{"string_a", SameChar}, {"string_b", SameChar}}, DefaultLogical},
+ {"lle", {{"string_a", SameChar}, {"string_b", SameChar}}, DefaultLogical},
+ {"llt", {{"string_a", SameChar}, {"string_b", SameChar}}, DefaultLogical},
{"log", {{"x", SameFloating}}, SameFloating},
{"log10", {{"x", SameReal}}, SameReal},
{"logical", {{"l", AnyLogical}, DefaultingKIND}, KINDLogical},
@@ -423,7 +432,7 @@
SameRelatable},
{"maxloc",
{{"array", AnyRelatable, Rank::array}, OptionalDIM, OptionalMASK,
- DefaultingKIND,
+ SubscriptDefaultKIND,
{"back", AnyLogical, Rank::scalar, Optionality::optional}},
KINDInt, Rank::dimReduced},
{"maxval",
@@ -445,7 +454,7 @@
SameRelatable},
{"minloc",
{{"array", AnyRelatable, Rank::array}, OptionalDIM, OptionalMASK,
- DefaultingKIND,
+ SubscriptDefaultKIND,
{"back", AnyLogical, Rank::scalar, Optionality::optional}},
KINDInt, Rank::dimReduced},
{"minval",
@@ -461,12 +470,12 @@
// NULL() is a special case handled in Probe() below
{"out_of_range",
{{"x", AnyIntOrReal}, {"mold", AnyIntOrReal, Rank::scalar}},
- DftLogical},
+ DefaultLogical},
{"out_of_range",
{{"x", AnyReal}, {"mold", AnyInt, Rank::scalar},
{"round", AnyLogical, Rank::scalar, Optionality::optional}},
- DftLogical},
- {"out_of_range", {{"x", AnyReal}, {"mold", AnyReal}}, DftLogical},
+ DefaultLogical},
+ {"out_of_range", {{"x", AnyReal}, {"mold", AnyReal}}, DefaultLogical},
{"pack",
{{"array", SameType, Rank::array},
{"mask", AnyLogical, Rank::conformable},
@@ -474,8 +483,8 @@
SameType, Rank::vector},
{"parity", {{"mask", SameLogical, Rank::array}, OptionalDIM}, SameLogical,
Rank::dimReduced},
- {"popcnt", {{"i", AnyInt}}, DftInt},
- {"poppar", {{"i", AnyInt}}, DftInt},
+ {"popcnt", {{"i", AnyInt}}, DefaultInt},
+ {"poppar", {{"i", AnyInt}}, DefaultInt},
{"product",
{{"array", SameNumeric, Rank::array}, OptionalDIM, OptionalMASK},
SameNumeric, Rank::dimReduced},
@@ -499,28 +508,30 @@
{"scan",
{{"string", SameChar}, {"set", SameChar},
{"back", AnyLogical, Rank::elemental, Optionality::optional},
- DefaultingKIND},
+ SubscriptDefaultKIND},
KINDInt},
- {"selected_char_kind", {{"name", DftChar, Rank::scalar}}, DftInt,
+ {"selected_char_kind", {{"name", DefaultChar, Rank::scalar}}, DefaultInt,
Rank::scalar},
- {"selected_int_kind", {{"r", AnyInt, Rank::scalar}}, DftInt, Rank::scalar},
+ {"selected_int_kind", {{"r", AnyInt, Rank::scalar}}, DefaultInt,
+ Rank::scalar},
{"selected_real_kind",
{{"p", AnyInt, Rank::scalar},
{"r", AnyInt, Rank::scalar, Optionality::optional},
{"radix", AnyInt, Rank::scalar, Optionality::optional}},
- DftInt, Rank::scalar},
+ DefaultInt, Rank::scalar},
{"selected_real_kind",
{{"p", AnyInt, Rank::scalar, Optionality::optional},
{"r", AnyInt, Rank::scalar},
{"radix", AnyInt, Rank::scalar, Optionality::optional}},
- DftInt, Rank::scalar},
+ DefaultInt, Rank::scalar},
{"selected_real_kind",
{{"p", AnyInt, Rank::scalar, Optionality::optional},
{"r", AnyInt, Rank::scalar, Optionality::optional},
{"radix", AnyInt, Rank::scalar}},
- DftInt, Rank::scalar},
+ DefaultInt, Rank::scalar},
{"set_exponent", {{"x", SameReal}, {"i", AnyInt}}, SameReal},
- {"shape", {{"source", Anything, Rank::anyOrAssumedRank}, DefaultingKIND},
+ {"shape",
+ {{"source", Anything, Rank::anyOrAssumedRank}, SubscriptDefaultKIND},
KINDInt, Rank::vector},
{"shifta", {{"i", SameInt}, {"shift", AnyInt}}, SameInt},
{"shiftl", {{"i", SameInt}, {"shift", AnyInt}}, SameInt},
@@ -528,11 +539,13 @@
{"sign", {{"a", SameIntOrReal}, {"b", SameIntOrReal}}, SameIntOrReal},
{"sin", {{"x", SameFloating}}, SameFloating},
{"sinh", {{"x", SameFloating}}, SameFloating},
- {"size", {{"array", Anything, Rank::anyOrAssumedRank}, DefaultingKIND},
+ {"size",
+ {{"array", Anything, Rank::anyOrAssumedRank}, SubscriptDefaultKIND},
KINDInt, Rank::vector},
{"size",
{{"array", Anything, Rank::anyOrAssumedRank},
- {"dim", {IntType, KindCode::dimArg}, Rank::scalar}, DefaultingKIND},
+ {"dim", {IntType, KindCode::dimArg}, Rank::scalar},
+ SubscriptDefaultKIND},
KINDInt, Rank::scalar},
{"spacing", {{"x", SameReal}}, SameReal},
{"spread",
@@ -545,7 +558,7 @@
SameNumeric, Rank::dimReduced},
{"tan", {{"x", SameFloating}}, SameFloating},
{"tanh", {{"x", SameFloating}}, SameFloating},
- {"trailz", {{"i", AnyInt}}, DftInt},
+ {"trailz", {{"i", AnyInt}}, DefaultInt},
{"transfer",
{{"source", Anything, Rank::known}, {"mold", SameType, Rank::scalar}},
SameType, Rank::scalar},
@@ -558,11 +571,13 @@
SameType, Rank::vector},
{"transpose", {{"matrix", SameType, Rank::matrix}}, SameType, Rank::matrix},
{"trim", {{"string", SameChar, Rank::scalar}}, SameChar, Rank::scalar},
- {"ubound", {{"array", Anything, Rank::anyOrAssumedRank}, DefaultingKIND},
+ {"ubound",
+ {{"array", Anything, Rank::anyOrAssumedRank}, SubscriptDefaultKIND},
KINDInt, Rank::vector},
{"ubound",
{{"array", Anything, Rank::anyOrAssumedRank},
- {"dim", {IntType, KindCode::dimArg}, Rank::scalar}, DefaultingKIND},
+ {"dim", {IntType, KindCode::dimArg}, Rank::scalar},
+ SubscriptDefaultKIND},
KINDInt, Rank::scalar},
{"unpack",
{{"vector", SameType, Rank::vector}, {"mask", AnyLogical, Rank::array},
@@ -571,7 +586,7 @@
{"verify",
{{"string", SameChar}, {"set", SameChar},
{"back", AnyLogical, Rank::elemental, Optionality::optional},
- DefaultingKIND},
+ SubscriptDefaultKIND},
KINDInt},
};
@@ -603,46 +618,46 @@
};
static const SpecificIntrinsicInterface specificIntrinsicFunction[]{
- {{"abs", {{"a", DftReal}}, DftReal}},
- {{"acos", {{"x", DftReal}}, DftReal}},
- {{"aimag", {{"z", DftComplex}}, DftReal}},
- {{"aint", {{"a", DftReal}}, DftReal}},
- {{"alog", {{"x", DftReal}}, DftReal}, "log"},
- {{"alog10", {{"x", DftReal}}, DftReal}, "log10"},
+ {{"abs", {{"a", DefaultReal}}, DefaultReal}},
+ {{"acos", {{"x", DefaultReal}}, DefaultReal}},
+ {{"aimag", {{"z", DefaultComplex}}, DefaultReal}},
+ {{"aint", {{"a", DefaultReal}}, DefaultReal}},
+ {{"alog", {{"x", DefaultReal}}, DefaultReal}, "log"},
+ {{"alog10", {{"x", DefaultReal}}, DefaultReal}, "log10"},
{{"amax0",
- {{"a1", DftInt}, {"a2", DftInt},
- {"a3", DftInt, Rank::elemental, Optionality::repeats}},
- DftReal},
+ {{"a1", DefaultInt}, {"a2", DefaultInt},
+ {"a3", DefaultInt, Rank::elemental, Optionality::repeats}},
+ DefaultReal},
"max", true},
{{"amax1",
- {{"a1", DftReal}, {"a2", DftReal},
- {"a3", DftReal, Rank::elemental, Optionality::repeats}},
- DftReal},
+ {{"a1", DefaultReal}, {"a2", DefaultReal},
+ {"a3", DefaultReal, Rank::elemental, Optionality::repeats}},
+ DefaultReal},
"max", true},
{{"amin0",
- {{"a1", DftInt}, {"a2", DftInt},
- {"a3", DftInt, Rank::elemental, Optionality::repeats}},
- DftReal},
+ {{"a1", DefaultInt}, {"a2", DefaultInt},
+ {"a3", DefaultInt, Rank::elemental, Optionality::repeats}},
+ DefaultReal},
"min", true},
{{"amin1",
- {{"a1", DftReal}, {"a2", DftReal},
- {"a3", DftReal, Rank::elemental, Optionality::repeats}},
- DftReal},
+ {{"a1", DefaultReal}, {"a2", DefaultReal},
+ {"a3", DefaultReal, Rank::elemental, Optionality::repeats}},
+ DefaultReal},
"min", true},
- {{"amod", {{"a", DftReal}, {"p", DftReal}}, DftReal}, "mod"},
- {{"anint", {{"a", DftReal}}, DftReal}},
- {{"asin", {{"x", DftReal}}, DftReal}},
- {{"atan", {{"x", DftReal}}, DftReal}},
- {{"atan2", {{"y", DftReal}, {"x", DftReal}}, DftReal}},
- {{"cabs", {{"a", DftComplex}}, DftReal}, "abs"},
- {{"ccos", {{"a", DftComplex}}, DftComplex}, "cos"},
- {{"cexp", {{"a", DftComplex}}, DftComplex}, "exp"},
- {{"clog", {{"a", DftComplex}}, DftComplex}, "log"},
- {{"conjg", {{"a", DftComplex}}, DftComplex}},
- {{"cos", {{"x", DftReal}}, DftReal}},
- {{"csin", {{"a", DftComplex}}, DftComplex}, "sin"},
- {{"csqrt", {{"a", DftComplex}}, DftComplex}, "sqrt"},
- {{"ctan", {{"a", DftComplex}}, DftComplex}, "tan"},
+ {{"amod", {{"a", DefaultReal}, {"p", DefaultReal}}, DefaultReal}, "mod"},
+ {{"anint", {{"a", DefaultReal}}, DefaultReal}},
+ {{"asin", {{"x", DefaultReal}}, DefaultReal}},
+ {{"atan", {{"x", DefaultReal}}, DefaultReal}},
+ {{"atan2", {{"y", DefaultReal}, {"x", DefaultReal}}, DefaultReal}},
+ {{"cabs", {{"a", DefaultComplex}}, DefaultReal}, "abs"},
+ {{"ccos", {{"a", DefaultComplex}}, DefaultComplex}, "cos"},
+ {{"cexp", {{"a", DefaultComplex}}, DefaultComplex}, "exp"},
+ {{"clog", {{"a", DefaultComplex}}, DefaultComplex}, "log"},
+ {{"conjg", {{"a", DefaultComplex}}, DefaultComplex}},
+ {{"cos", {{"x", DefaultReal}}, DefaultReal}},
+ {{"csin", {{"a", DefaultComplex}}, DefaultComplex}, "sin"},
+ {{"csqrt", {{"a", DefaultComplex}}, DefaultComplex}, "sqrt"},
+ {{"ctan", {{"a", DefaultComplex}}, DefaultComplex}, "tan"},
{{"dabs", {{"a", DoublePrecision}}, DoublePrecision}, "abs"},
{{"dacos", {{"x", DoublePrecision}}, DoublePrecision}, "acos"},
{{"dasin", {{"x", DoublePrecision}}, DoublePrecision}, "asin"},
@@ -650,14 +665,15 @@
{{"datan2", {{"y", DoublePrecision}, {"x", DoublePrecision}},
DoublePrecision},
"atan2"},
- {{"dble", {{"a", DftReal}, DefaultingKIND}, DoublePrecision}, "real", true},
+ {{"dble", {{"a", DefaultReal}, DefaultingKIND}, DoublePrecision}, "real",
+ true},
{{"dcos", {{"x", DoublePrecision}}, DoublePrecision}, "cos"},
{{"dcosh", {{"x", DoublePrecision}}, DoublePrecision}, "cosh"},
{{"ddim", {{"x", DoublePrecision}, {"y", DoublePrecision}},
DoublePrecision},
"dim"},
{{"dexp", {{"x", DoublePrecision}}, DoublePrecision}, "exp"},
- {{"dim", {{"x", DftReal}, {"y", DftReal}}, DftReal}},
+ {{"dim", {{"x", DefaultReal}, {"y", DefaultReal}}, DefaultReal}},
{{"dint", {{"a", DoublePrecision}}, DoublePrecision}, "aint"},
{{"dlog", {{"x", DoublePrecision}}, DoublePrecision}, "log"},
{{"dlog10", {{"x", DoublePrecision}}, DoublePrecision}, "log10"},
@@ -675,7 +691,7 @@
DoublePrecision},
"mod"},
{{"dnint", {{"a", DoublePrecision}}, DoublePrecision}, "anint"},
- {{"dprod", {{"x", DftReal}, {"y", DftReal}}, DoublePrecision}},
+ {{"dprod", {{"x", DefaultReal}, {"y", DefaultReal}}, DoublePrecision}},
{{"dsign", {{"a", DoublePrecision}, {"b", DoublePrecision}},
DoublePrecision},
"sign"},
@@ -684,47 +700,48 @@
{{"dsqrt", {{"x", DoublePrecision}}, DoublePrecision}, "sqrt"},
{{"dtan", {{"x", DoublePrecision}}, DoublePrecision}, "tan"},
{{"dtanh", {{"x", DoublePrecision}}, DoublePrecision}, "tanh"},
- {{"exp", {{"x", DftReal}}, DftReal}},
- {{"float", {{"i", DftInt}}, DftReal}, "real", true},
- {{"iabs", {{"a", DftInt}}, DftInt}, "abs"},
- {{"idim", {{"x", DftInt}, {"y", DftInt}}, DftInt}, "dim"},
- {{"idint", {{"a", DoublePrecision}}, DftInt}, "int", true},
- {{"idnint", {{"a", DoublePrecision}}, DftInt}, "nint"},
- {{"ifix", {{"a", DftReal}}, DftInt}, "int", true},
- {{"index", {{"string", DftChar}, {"substring", DftChar}}, DftInt}},
- {{"isign", {{"a", DftInt}, {"b", DftInt}}, DftInt}, "sign"},
- {{"len", {{"string", DftChar}}, DftInt}},
- {{"log", {{"x", DftReal}}, DftReal}},
- {{"log10", {{"x", DftReal}}, DftReal}},
+ {{"exp", {{"x", DefaultReal}}, DefaultReal}},
+ {{"float", {{"i", DefaultInt}}, DefaultReal}, "real", true},
+ {{"iabs", {{"a", DefaultInt}}, DefaultInt}, "abs"},
+ {{"idim", {{"x", DefaultInt}, {"y", DefaultInt}}, DefaultInt}, "dim"},
+ {{"idint", {{"a", DoublePrecision}}, DefaultInt}, "int", true},
+ {{"idnint", {{"a", DoublePrecision}}, DefaultInt}, "nint"},
+ {{"ifix", {{"a", DefaultReal}}, DefaultInt}, "int", true},
+ {{"index", {{"string", DefaultChar}, {"substring", DefaultChar}},
+ DefaultInt}},
+ {{"isign", {{"a", DefaultInt}, {"b", DefaultInt}}, DefaultInt}, "sign"},
+ {{"len", {{"string", DefaultChar}}, DefaultInt}},
+ {{"log", {{"x", DefaultReal}}, DefaultReal}},
+ {{"log10", {{"x", DefaultReal}}, DefaultReal}},
{{"max0",
- {{"a1", DftInt}, {"a2", DftInt},
- {"a3", DftInt, Rank::elemental, Optionality::repeats}},
- DftInt},
+ {{"a1", DefaultInt}, {"a2", DefaultInt},
+ {"a3", DefaultInt, Rank::elemental, Optionality::repeats}},
+ DefaultInt},
"max", true},
{{"max1",
- {{"a1", DftReal}, {"a2", DftReal},
- {"a3", DftReal, Rank::elemental, Optionality::repeats}},
- DftInt},
+ {{"a1", DefaultReal}, {"a2", DefaultReal},
+ {"a3", DefaultReal, Rank::elemental, Optionality::repeats}},
+ DefaultInt},
"max", true},
{{"min0",
- {{"a1", DftInt}, {"a2", DftInt},
- {"a3", DftInt, Rank::elemental, Optionality::repeats}},
- DftInt},
+ {{"a1", DefaultInt}, {"a2", DefaultInt},
+ {"a3", DefaultInt, Rank::elemental, Optionality::repeats}},
+ DefaultInt},
"min", true},
{{"min1",
- {{"a1", DftReal}, {"a2", DftReal},
- {"a3", DftReal, Rank::elemental, Optionality::repeats}},
- DftInt},
+ {{"a1", DefaultReal}, {"a2", DefaultReal},
+ {"a3", DefaultReal, Rank::elemental, Optionality::repeats}},
+ DefaultInt},
"min", true},
- {{"mod", {{"a", DftInt}, {"p", DftInt}}, DftInt}},
- {{"nint", {{"a", DftReal}}, DftInt}},
- {{"sign", {{"a", DftReal}, {"b", DftReal}}, DftReal}},
- {{"sin", {{"x", DftReal}}, DftReal}},
- {{"sinh", {{"x", DftReal}}, DftReal}},
- {{"sngl", {{"a", DoublePrecision}}, DftReal}, "real", true},
- {{"sqrt", {{"x", DftReal}}, DftReal}},
- {{"tan", {{"x", DftReal}}, DftReal}},
- {{"tanh", {{"x", DftReal}}, DftReal}},
+ {{"mod", {{"a", DefaultInt}, {"p", DefaultInt}}, DefaultInt}},
+ {{"nint", {{"a", DefaultReal}}, DefaultInt}},
+ {{"sign", {{"a", DefaultReal}, {"b", DefaultReal}}, DefaultReal}},
+ {{"sin", {{"x", DefaultReal}}, DefaultReal}},
+ {{"sinh", {{"x", DefaultReal}}, DefaultReal}},
+ {{"sngl", {{"a", DoublePrecision}}, DefaultReal}, "real", true},
+ {{"sqrt", {{"x", DefaultReal}}, DefaultReal}},
+ {{"tan", {{"x", DefaultReal}}, DefaultReal}},
+ {{"tanh", {{"x", DefaultReal}}, DefaultReal}},
};
// TODO: Intrinsic subroutines
@@ -1017,6 +1034,10 @@
} else if (kindDummyArg->optionality == Optionality::defaultsToSameKind) {
CHECK(sameArg != nullptr);
resultType = *sameArg->GetType();
+ } else if (kindDummyArg->optionality ==
+ Optionality::defaultsToSubscriptKind) {
+ CHECK(resultType.category == TypeCategory::Integer);
+ resultType.kind = defaults.subscriptIntegerKind();
} else {
CHECK(
kindDummyArg->optionality == Optionality::defaultsToDefaultForResult);