diff --git a/TestSuite/question_point1.pas b/TestSuite/question_point1.pas new file mode 100644 index 000000000..8571d0822 --- /dev/null +++ b/TestSuite/question_point1.pas @@ -0,0 +1,10 @@ +procedure p1(x: T); +begin + var o := x; + var ot := o?.GetType; + assert(ot = typeof(integer)); +end; + +begin +p1(2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/semantic_checks_for_sugar.cs b/TreeConverter/TreeConversion/semantic_checks_for_sugar.cs index 868187ff7..c568a0f40 100644 --- a/TreeConverter/TreeConversion/semantic_checks_for_sugar.cs +++ b/TreeConverter/TreeConversion/semantic_checks_for_sugar.cs @@ -152,7 +152,7 @@ namespace PascalABCCompiler.TreeConverter t = ctn1.compiled_type; if (av.type.type_special_kind == SemanticTree.type_special_kind.array_kind) return; - if (!av.type.is_class && !av.type.IsInterface && !(t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>))) + if (!av.type.is_class && !av.type.IsInterface && !(t != null && t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)) && !av.type.is_generic_parameter) AddError(av.location, "OPERATOR_DQ_MUST_BE_USED_WITH_A_REFERENCE_TYPE_VALUETYPE"); }