summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2007-03-18 13:22:03 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2007-03-18 13:22:03 +0000
commit857186314aec24a7e4032042e3190606c0b6d5fd (patch)
tree9c27c298c99a9c4874374bd66b43b515b811cf5c
parentfdc51a8924586dc774afd0b0d1cd5bec9c9cc9ee (diff)
downloadfpc-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.pas12
-rw-r--r--tests/webtbf/tw8528.pp16
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.