瀏覽代碼

* fix result type of constset+[]

git-svn-id: trunk@10311 -
peter 17 年之前
父節點
當前提交
737212ff22
共有 3 個文件被更改,包括 19 次插入2 次删除
  1. 1 0
      .gitattributes
  2. 3 2
      compiler/nadd.pas
  3. 15 0
      tests/tbs/tbs0544.pp

+ 1 - 0
.gitattributes

@@ -6720,6 +6720,7 @@ tests/tbs/tb0541.pp svneol=native#text/plain
 tests/tbs/tb0542.pp svneol=native#text/plain
 tests/tbs/tb0543.pp svneol=native#text/plain
 tests/tbs/tb205.pp svneol=native#text/plain
+tests/tbs/tbs0544.pp svneol=native#text/plain
 tests/tbs/ub0060.pp svneol=native#text/plain
 tests/tbs/ub0069.pp svneol=native#text/plain
 tests/tbs/ub0119.pp svneol=native#text/plain

+ 3 - 2
compiler/nadd.pas

@@ -681,8 +681,9 @@ implementation
              if (tsetdef(right.resultdef).settype=smallset) and
                 (tsetdef(left.resultdef).settype<>smallset) then
                right.resultdef:=tsetdef.create(tsetdef(right.resultdef).elementdef,0,255);
-             { check base types }
-             inserttypeconv(left,right.resultdef);
+             { check base types, keep the original type if right was an empty set }
+             if assigned(tsetdef(right.resultdef).elementdef) then
+               inserttypeconv(left,right.resultdef);
 
              if codegenerror then
               begin

+ 15 - 0
tests/tbs/tbs0544.pp

@@ -0,0 +1,15 @@
+
+type SomeType = ( SomeElem );
+
+const ElemSet = [ SomeElem ];
+
+var
+  b  : boolean;
+begin
+   b:=(SomeElem in ElemSet);
+   writeln(b);
+   b:=(SomeElem in (ElemSet + []));
+   writeln(b);
+   if not b then
+     halt(1);
+end.