diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp
--- a/flang/lib/Semantics/expression.cpp
+++ b/flang/lib/Semantics/expression.cpp
@@ -2739,7 +2739,8 @@
                 proc.u)}) {
       Symbol &symbol{origSymbol->GetUltimate()};
       if (symbol.has<semantics::ObjectEntityDetails>() ||
-          symbol.has<semantics::AssocEntityDetails>()) {
+          symbol.has<semantics::AssocEntityDetails>() ||
+          symbol.has<semantics::TypeParamDetails>()) {
         // Note that expression in AssocEntityDetails cannot be a procedure
         // pointer as per C1105 so this cannot be a function reference.
         if constexpr (common::HasMember<common::Indirection<parser::Designator>,
diff --git a/flang/test/Semantics/resolve59.f90 b/flang/test/Semantics/resolve59.f90
--- a/flang/test/Semantics/resolve59.f90
+++ b/flang/test/Semantics/resolve59.f90
@@ -136,3 +136,16 @@
   !ERROR: Reference to rank-2 object 'x' has 3 subscripts
   y = x(1, 2, 3)
 end
+
+subroutine with_type_param
+  type derived(typeParam)
+    integer,kind :: typeParam
+    integer :: field(typeParam)
+  end type
+  type(derived(3)) x
+  x = derived(3)([11,22,33])
+  !ERROR: 'typeparam' is not a function
+  print *,x%typeParam()
+  !ERROR: Reference to array 'field' with empty subscript list
+  print *,x%field()
+end