From 5a20ef15dcb4850f2389e35570925c2be82736b3 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Tue, 26 Jan 2021 20:41:42 +0100 Subject: [PATCH] #2415 --- TestSuite/errors/err0402.pas | 13 +++++++++++++ TreeConverter/TreeRealization/generics.cs | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 TestSuite/errors/err0402.pas diff --git a/TestSuite/errors/err0402.pas b/TestSuite/errors/err0402.pas new file mode 100644 index 000000000..d5c7b1c58 --- /dev/null +++ b/TestSuite/errors/err0402.pas @@ -0,0 +1,13 @@ +type + t0 = abstract class + private constructor := exit; + end; + + t1 = class + where T: t0, constructor; + + end; + +begin + new t1; +end. \ No newline at end of file diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs index 6bb1c7430..921d20f82 100644 --- a/TreeConverter/TreeRealization/generics.cs +++ b/TreeConverter/TreeRealization/generics.cs @@ -1345,7 +1345,7 @@ namespace PascalABCCompiler.TreeRealization public static bool type_has_default_ctor(type_node tn, bool find_protected_ctors) { - if (tn.is_generic_parameter && tn.base_type != null && tn.base_type.IsAbstract) + if (tn.is_generic_parameter && tn.base_type != null && tn.base_type.IsAbstract && !(tn is common_type_node && (tn as common_type_node).has_default_constructor)) return false; List sil = tn.find_in_type(compiler_string_consts.default_constructor_name, tn.Scope); if (sil != null)