diff options
author | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-03-18 13:22:03 +0000 |
---|---|---|
committer | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-03-18 13:22:03 +0000 |
commit | 857186314aec24a7e4032042e3190606c0b6d5fd (patch) | |
tree | 9c27c298c99a9c4874374bd66b43b515b811cf5c | |
parent | fdc51a8924586dc774afd0b0d1cd5bec9c9cc9ee (diff) | |
download | fpc-857186314aec24a7e4032042e3190606c0b6d5fd.tar.gz |
Merged revisions 6885,6892 via svnmerge from
svn+ssh://jonas@svn.freepascal.org/FPC/svn/fpc/trunk
........
r6885 | jonas | 2007-03-16 20:44:43 +0100 (Fri, 16 Mar 2007) | 3 lines
* give again an error for "in" operations on incompatible set
elements/sets after introduction of support for "longint in set"
........
r6892 | jonas | 2007-03-16 23:31:51 +0100 (Fri, 16 Mar 2007) | 2 lines
* slightly improved previous in checking patch
........
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/fixes_2_2@6916 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r-- | compiler/nset.pas | 12 | ||||
-rw-r--r-- | tests/webtbf/tw8528.pp | 16 |
2 files changed, 27 insertions, 1 deletions
diff --git a/compiler/nset.pas b/compiler/nset.pas index f2f810f0ac..c545d71ed0 100644 --- a/compiler/nset.pas +++ b/compiler/nset.pas @@ -268,7 +268,17 @@ implementation inserttypeconv(left,s32inttype) else inserttypeconv(left,u32inttype); - end; + end + else if assigned(tsetdef(right.resultdef).elementdef) and + not(is_integer(tsetdef(right.resultdef).elementdef) and + is_integer(left.resultdef)) then + { Type conversion to check things like 'char in set_of_byte'. } + { Can't use is_subequal because that will fail for } + { 'widechar in set_of_char' } + { Can't use the type conversion for integers because then } + { "longint in set_of_byte" will give a range check error } + { instead of false } + inserttypeconv(left,tsetdef(right.resultdef).elementdef); { empty set then return false } if not assigned(tsetdef(right.resultdef).elementdef) or diff --git a/tests/webtbf/tw8528.pp b/tests/webtbf/tw8528.pp new file mode 100644 index 0000000000..e02b58fba9 --- /dev/null +++ b/tests/webtbf/tw8528.pp @@ -0,0 +1,16 @@ +{ %fail } + +program test; + +{$mode objfpc}{$H+} + +const + AllowedCharSet: set of Byte = [48..60]; + +var + s: string; +begin + s := 'test0'; + if s[5] in AllowedCharSet then + Writeln('huh?'); +end. |