Le 30/08/2011 17:50, Jérôme Gardou a écrit :
Hello.
Maybe the comment isn't clear enough.
The ranges are correctly output into the format string, but the offset
of each output is lost during the processing. For instance, declaring
a function like this one :
DWORD Test(
[in, range(0, 1024)] DWORD dwParam1,
[in, range(0, 255)] DWORD dwParam2);
would output both parameter declarations into the type format string
with correct range values, but the offsets into the procedure format
string would both point to the last one.
I'll try to write a test to show this behaviour, but I'm not sure of
how to integrate this in wine test suite.
Note : this problem manifests itself when -Oif flag is enabled.
Regards.
Jérôme.
Le 30/08/2011 12:46, Alexandre Julliard a écrit :
Jérôme Gardou<jerome.gar...@laposte.net> writes:
@@ -1418,6 +1418,11 @@ static var_t *declare_var(attr_list_t *attrs,
decl_spec_t *decl_spec, const decl
type_t *func_type = decl ? decl->func_type : NULL;
type_t *type = decl_spec->type;
+ /* In case of a range attribute, duplicate the type to keep track of
+ * the min/max values in the type format string */
+ if(is_attr(attrs, ATTR_RANGE))
+ type = duptype(type, 1);
You shouldn't need that. The range should go with the variable and be
output again for each type. Please add a test case showing the problem.
Sorry, I forgot that the policy here was to reply after the previous mail.
Anyway, I've looked into this a bit, and it seems that the place to
write a proper test is rpcrt4 test suite.
While writing the test would per se be very easy, the problem won't show
up if -Oif isn't set on the tested idl file. Adding this to the
EXTRAIDLFLAGS variable in Makefile.in would do the trick, but I doubt
that this is what you want.
Any hint on the way to proceed would be greatly appreciated.
Regards.
Jérôme