diff --git a/lib/puppet/pops/types/type_mismatch_describer.rb b/lib/puppet/pops/types/type_mismatch_describer.rb
index <HASH>..<HASH> 100644
--- a/lib/puppet/pops/types/type_mismatch_describer.rb
+++ b/lib/puppet/pops/types/type_mismatch_describer.rb
@@ -753,7 +753,7 @@ module Types
     end
 
     def describe_POptionalType(expected, original, actual, path)
-      return EMPTY_ARRAY if actual.is_a?(PUndefType)
+      return EMPTY_ARRAY if actual.is_a?(PUndefType) || expected.optional_type.nil?
       internal_describe(expected.optional_type, original.is_a?(PTypeAliasType) ? original : expected, actual, path)
     end
(PUP-<I>) Fix problem with mismatch describer Optional without T

Before this, the MismatchDescriber (which is also involved in type
checking of parameters) did not recognize that an Optional without T
parameter would have a `nil` T. Now it recognizes this and immediately
accepts any value since `Optional` is the same as `Optional[Any]` which
is the same as `Any` (since `Any` includes `Undef`).