diff options
author | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-05-16 07:23:47 +0000 |
---|---|---|
committer | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-05-16 07:23:47 +0000 |
commit | cbecc8dd176c8ba833b0aa961805d8f1e3e557f9 (patch) | |
tree | d65969c9db4610f541ee369fc65e8e38da45c679 | |
parent | 9acc75b5a66aefb949946734067758426911687d (diff) | |
download | fpc-cbecc8dd176c8ba833b0aa961805d8f1e3e557f9.tar.gz |
Merged revisions 10957 via svnmerge from
http://svn.freepascal.org/svn/fpc/trunk
........
r10957 | florian | 2008-05-12 14:45:55 +0200 (Mon, 12 May 2008) | 2 lines
* compare constant sets correctly while choosing an overloaded procedure, resolves #11288
........
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/fixes_2_2@10980 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r-- | compiler/htypechk.pas | 12 | ||||
-rw-r--r-- | tests/webtbs/tw11288.pp | 24 |
2 files changed, 36 insertions, 0 deletions
diff --git a/compiler/htypechk.pas b/compiler/htypechk.pas index 091fe73218..dc2b8d2948 100644 --- a/compiler/htypechk.pas +++ b/compiler/htypechk.pas @@ -1974,6 +1974,7 @@ implementation pdoper : tprocdef; releasecurrpt : boolean; cdoptions : tcompare_defs_options; + n : tnode; {$ifopt r+}{$define ena_rq}{$q-}{$r-}{$endif} const @@ -2137,6 +2138,17 @@ implementation objdef:=objdef.childof; end; end + { compare_defs_ext compares sets and array constructors very poorly because + it has too little information. So we do explicitly a detailed comparisation, + see also bug #11288 (FK) + } + else if (def_to.typ=setdef) and is_array_constructor(currpt.left.resultdef) then + begin + n:=currpt.left.getcopy; + arrayconstructor_to_set(n); + eq:=compare_defs_ext(n.resultdef,def_to,n.nodetype,convtype,pdoper,cdoptions); + n.free; + end else { generic type comparision } begin diff --git a/tests/webtbs/tw11288.pp b/tests/webtbs/tw11288.pp new file mode 100644 index 0000000000..770afa7ef1 --- /dev/null +++ b/tests/webtbs/tw11288.pp @@ -0,0 +1,24 @@ +program project1; + +{$mode delphi} + +type + TEnum1 = (en1, en2); + TEnum2 = (en3, en4); + + TSet1 = set of TEnum1; + TSet2 = set of TEnum2; + +procedure DoSomethingWithSet(ASet: TSet1); overload; +begin + +end; + +procedure DoSomethingWithSet(ASet: TSet2); overload; +begin + +end; + +begin + DoSomethingWithSet([en1]); +end. |