diff --git a/flang/lib/Evaluate/fold-integer.cpp b/flang/lib/Evaluate/fold-integer.cpp index 594a614a5f2e7..0ad09d76a6555 100644 --- a/flang/lib/Evaluate/fold-integer.cpp +++ b/flang/lib/Evaluate/fold-integer.cpp @@ -873,7 +873,7 @@ Expr> FoldIntrinsicFunction( } else { DIE("first argument must be CHARACTER"); } - } else if (name == "int") { + } else if (name == "int" || name == "int2" || name == "int8") { if (auto *expr{UnwrapExpr>(args[0])}) { return common::visit( [&](auto &&x) -> Expr { diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp index aa44967817722..89d92d7ed3ef6 100644 --- a/flang/lib/Evaluate/intrinsics.cpp +++ b/flang/lib/Evaluate/intrinsics.cpp @@ -572,6 +572,10 @@ static const IntrinsicInterface genericIntrinsicFunction[]{ DefaultingKIND}, KINDInt}, {"int", {{"a", AnyNumeric, Rank::elementalOrBOZ}, DefaultingKIND}, KINDInt}, + {"int2", {{"a", AnyNumeric, Rank::elementalOrBOZ}}, + TypePattern{IntType, KindCode::exactKind, 2}}, + {"int8", {{"a", AnyNumeric, Rank::elementalOrBOZ}}, + TypePattern{IntType, KindCode::exactKind, 8}}, {"int_ptr_kind", {}, DefaultInt, Rank::scalar}, {"ior", {{"i", OperandInt}, {"j", OperandInt, Rank::elementalOrBOZ}}, OperandInt}, @@ -1176,12 +1180,6 @@ static const SpecificIntrinsicInterface specificIntrinsicFunction[]{ // procedure pointer target. {{"index", {{"string", DefaultChar}, {"substring", DefaultChar}}, DefaultInt}}, - {{"int2", {{"a", AnyNumeric, Rank::elementalOrBOZ}}, - TypePattern{IntType, KindCode::exactKind, 2}}, - "int"}, - {{"int8", {{"a", AnyNumeric, Rank::elementalOrBOZ}}, - TypePattern{IntType, KindCode::exactKind, 8}}, - "int"}, {{"isign", {{"a", DefaultInt}, {"b", DefaultInt}}, DefaultInt}, "sign"}, {{"jiabs", {{"a", TypePattern{IntType, KindCode::exactKind, 4}}}, TypePattern{IntType, KindCode::exactKind, 4}}, diff --git a/flang/test/Evaluate/int8.f90 b/flang/test/Evaluate/int8.f90 index ef8321f4c710b..677f1b15a076a 100644 --- a/flang/test/Evaluate/int8.f90 +++ b/flang/test/Evaluate/int8.f90 @@ -1,5 +1,7 @@ -! RUN: %flang_fc1 -fdebug-unparse %s 2>&1 | FileCheck %s +!RUN: not %flang_fc1 -fsyntax-only %s 2>&1 | FileCheck %s !CHECK: warning: REAL(4) to INTEGER(2) conversion overflowed -!CHECK: PRINT *, 32767_2, 4000000000_8 print *, int2(4.e9), int8(4.e9) +!CHECK: error: 'int2' is not an unrestricted specific intrinsic procedure +!CHECK: error: 'int8' is not an unrestricted specific intrinsic procedure +call foo(int2,int8) end