Browse Source

* allow [] for constant set constraints, resolves #37020

florian 1 year ago
parent
commit
1222456c13
2 changed files with 22 additions and 1 deletions
  1. 3 1
      compiler/pgenutil.pas
  2. 19 0
      tests/webtbs/tw37020.pp

+ 3 - 1
compiler/pgenutil.pas

@@ -167,7 +167,9 @@ uses
           result:=true
           result:=true
         { sets require stricter checks }
         { sets require stricter checks }
         else if is_set(param2) then
         else if is_set(param2) then
-          result:=equal_defs(param1,param2)
+          result:=equal_defs(param1,param2) or
+            { constant could be empty set }
+            not(assigned(tsetdef(param1).elementdef))
         else
         else
           result:=param1.typ=param2.typ;
           result:=param1.typ=param2.typ;
       end;
       end;

+ 19 - 0
tests/webtbs/tw37020.pp

@@ -0,0 +1,19 @@
+{$mode objfpc}
+
+program test;
+
+type
+ TItem = (A, B, C);
+ TItems = set of TItem;
+ generic GType<const T: TItems> = class
+ end;
+
+const
+ TOtherItems = [];   // no problems here
+
+type
+ // error: Incompatible types: got "Empty Set" expected "TItems"
+ TType = specialize GType<[]>;
+
+begin
+end.