diff options
author | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-01-04 12:54:47 +0000 |
---|---|---|
committer | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-01-04 12:54:47 +0000 |
commit | 834b930de33f87896e00d683f13bca6c5544a8bb (patch) | |
tree | 9c54085f41c603c58ecb6f7da7f722432322b8ec | |
parent | de7f468961bd4ba3b7558cced5162a1dd48362c5 (diff) | |
download | fpc-834b930de33f87896e00d683f13bca6c5544a8bb.tar.gz |
* perform real "exactness" checking for open array parameters
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@9624 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r-- | compiler/defcmp.pas | 18 | ||||
-rw-r--r-- | tests/tbf/tb0205.pp | 14 |
2 files changed, 25 insertions, 7 deletions
diff --git a/compiler/defcmp.pas b/compiler/defcmp.pas index 1de11238c6..ef4c580ed9 100644 --- a/compiler/defcmp.pas +++ b/compiler/defcmp.pas @@ -705,7 +705,10 @@ implementation { open array -> open array } if is_open_array(def_from) and equal_defs(tarraydef(def_from).elementdef,tarraydef(def_to).elementdef) then - eq:=te_equal + if tarraydef(def_from).elementdef=tarraydef(def_to).elementdef then + eq:=te_exact + else + eq:=te_equal else { array -> open array } if not(cdo_parameter in cdoptions) and @@ -1566,12 +1569,13 @@ implementation { check type } if eq=te_incompatible then exit; - { open arrays can never match exactly, since you cannot define } - { a separate "open array" type -> we have to be able to } - { consider those as exact when resolving forward definitions. } - { The same goes for openstrings and array of const } - if (is_open_array(currpara1.vardef) or - is_array_of_const(currpara1.vardef) or + { open strings can never match exactly, since you cannot define } + { a separate "open string" type -> we have to be able to } + { consider those as exact when resolving forward definitions. } + { The same goes for array of const. Open arrays are handled } + { already (if their element types match exactly, they are } + { considered to be an exact match) } + if (is_array_of_const(currpara1.vardef) or is_open_string(currpara1.vardef)) and (eq=te_equal) and (cpo_openequalisexact in cpoptions) then diff --git a/tests/tbf/tb0205.pp b/tests/tbf/tb0205.pp new file mode 100644 index 0000000000..16ec5b5c36 --- /dev/null +++ b/tests/tbf/tb0205.pp @@ -0,0 +1,14 @@ +{ %fail } + +procedure test(a: array of longint); forward; + +type + tl = type longint; + +procedure test(a: array of tl); +begin +end; + +begin +end. + |