This node type is intended for use during parse-time.
While we parse an indexing expression such as `a[3]`, we don't know if
it will end up as part of an expression (in which case it must be folded
into a load) or it is for the lhs of a store (in which case it must be
folded into the store's deref). This node type is used to represent these accesses and no longer rely on building an `hlsl_ir_load` for each array index or struct record access.
`hlsl_ir_index` chains are lowered into derefs when (and if) they are used to specify the lhs of an assignment. All `hlsl_ir_index`es are lowered into `hlsl_ir_load`s with a compilation pass.
The changes introduced in these series allow to solve the problem with the return variable of function calls presented in !93, and to properly support assignment to matrix indexes, which is something we are not doing correctly.
Further patches (in my [index node](https://gitlab.winehq.org/fcasas/vkd3d/-/commits/index_node) branch) add support for indexing non-load expressions, such as `(a + b)[1]` and allowing to represent resource loads through `hlsl_ir_index`, so that `hlsl_ir_resource_store`s don't have to rely on `hlsl_ir_resource_load`s.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/124
FVWM doesn't respect PPosition hints by default and tries to tile a window according to its rules.
This might break tests that require a window at a specific position. For example, when setting the
caption bar height to anything other than 18, some user32 tests start to fail. They succeeded
previously just because the caption bar and border height on FVWM totals to 18, which is happens to
be the same value used by Wine by default.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2410
Hans Leidekker (@hans) commented about dlls/crypt32/str.c:
> - oid = szOID_RSA_emailAddr;
> - nameAttr = CertFindRDNAttr(oid, nameInfo);
> + if (oid)
> + nameAttr = CertFindRDNAttr(oid, nameInfo);
> + else
> + {
> + static const LPCSTR attributeOIDs[] =
> + {
> + szOID_RSA_emailAddr, szOID_COMMON_NAME,
> + szOID_ORGANIZATIONAL_UNIT_NAME, szOID_ORGANIZATION_NAME
> + };
> + DWORD i;
> +
> + for (i = 0; !nameAttr && i < ARRAY_SIZE(attributeOIDs); i++)
> + nameAttr = CertFindRDNAttr(attributeOIDs[i], nameInfo);
> + }
Thanks for the patch. Could you add a test to crypt32/tests/str.c? At least one fallback case would be good to have.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2403#note_26961
LPWSTR __cdecl wcsncpy( LPWSTR s1, LPCWSTR s2, size_t n )
{
WCHAR *ret = s1;
**//When encountering 0, the loop will jump out directly, but the pointer of s1 has been++, which leads to the memory overflow of the second for**
for ( ; n; n--) if (!(*s1++ = *s2++)) break;
for ( ; n; n--) *s1++ = 0;
return ret;
}
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2363