diff --git a/TestSuite/where11.pas b/TestSuite/where11.pas new file mode 100644 index 000000000..d6bdd6df4 --- /dev/null +++ b/TestSuite/where11.pas @@ -0,0 +1,14 @@ +type + + t1 = class where T: t1; + + function p1: T; + begin + var a: t1; + var b := a as T; + end; + + end; + +begin +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 5ea7fff54..501adcd49 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -3085,7 +3085,7 @@ namespace PascalABCCompiler.TreeConverter } else { - if (tp.is_generic_parameter && !tp.is_class && !(tp.base_type != null && tp.base_type.is_class)) + if (tp.is_generic_parameter && !tp.is_class && !(tp.base_type != null && tp.base_type.is_class) && !(tp.base_type != null && tp.base_type.original_generic != null && tp.base_type.original_generic.is_class)) AddError(get_location(node.type_def), "OPERATOR_AS_CAN_NOT_BE_USED_WITH_GENERIC_PARAMETER_{0}_WITHOUT_CLASS_CONSTRAINT", tp.name); if (tp.is_value_type) AddError(get_location(node.type_def), "OPERATOR_AS_MUST_BE_USED_WITCH_A_REFERENCE_TYPE_VALUETYPE{0}", tp.PrintableName);