wintrust/tests: Fix build with MSVC.
Thomas Faber
thfabba at gmx.de
Thu Jun 21 05:56:43 CDT 2012
On 2012-06-21 12:34, Dmitry Timoshkov wrote:
> Thomas Faber <thfabba at gmx.de> wrote:
>
>> FIELD_OFFSET isn't constant "enough".
>
> The problem is not with FIELD_OFFSET, but with applying shift and mask
> operations to a constant.
You're right, it's actually a combination of multiple factors. I'm not sure
what exactly its problem is - the gist is, FIELD_OFFSET cannot reliably be
assumed constant.
E.g. the following code only complains about c4:
struct a {
char a;
int b[5];
int c;
};
int c1 = (int)&(((struct a *)0)->a) << 8;
int c2 = (int)&(((struct a *)0)->b[0]);
int c3 = (int)&(((struct a *)0)->b[0]) + 1;
int c4 = (int)&(((struct a *)0)->b[0]) << 8;
int c5 = (int)&(((struct a *)0)->b) << 8;
int c6 = (int)&(((struct a *)0)->c) << 8;
On 2012-06-21 12:11, Dmitry Timoshkov wrote:
> Thomas Faber <thfabba at gmx.de> wrote:
>
>> Empty braces are no valid initializer.
>> FIELD_OFFSET isn't constant "enough".
>
>> + /* add 'jmp ExitProcess' instruction */
>> + count = 2;
>> + bin.text_section[count++] = 0xFF;
>> + bin.text_section[count++] = 0x25;
>> + bin.text_section[count++] = EXIT_PROCESS&0xFF;
>> + bin.text_section[count++] = (EXIT_PROCESS>>8)&0xFF;
>> + bin.text_section[count++] = (EXIT_PROCESS>>16)&0xFF;
>> + bin.text_section[count++] = (EXIT_PROCESS>>24)&0xFF;
Which in turn means it doesn't consider these constant, which is why
I filled them in at runtime instead.
I thought this cleaner than hardcoding the offset or otherwise forcing
it to a constant.
I hope that makes sense.
Thanks for your comments.
Best regards,
Tom
More information about the wine-devel
mailing list