Integrated: 8286876: NMT.test_unaliged_block_address_vm_assert fails if using clang toolchain
Johan Sjölen
jsjolen at openjdk.org
Thu Feb 2 10:18:13 UTC 2023
On Thu, 1 Dec 2022 19:47:16 GMT, Johan Sjölen <jsjolen at openjdk.org> wrote:
> This fixes a bug by removing some UB which Clang used in order to make a test fail. Specifically, Clang optimized the `is_aligned` call in ` MallocHeader::assert_block_integrity` to `true`, because an unaligned `this` is UB. This is fixed by making a static method, essentially. The new code liberally uses `reinterpret_cast<uintptr_t>()`, this is a specifically mentioned as legal use on https://en.cppreference.com/w/cpp/language/reinterpret_cast .
>
> **The idea is essentially:** Make sure the pointer looks OK before casting it to a `MallocHeader*`.
>
> I also changed the definition of `malloc_header`:
>
> ```c++
> // old
> return (MallocHeader*)((char*)memblock - sizeof(MallocHeader));
> // new
> return &(((MallocHeader*)memblock)[-1]);
>
>
> The previous definition was UB, because you shouldn't cast from a pointer with smaller alignment to one with larger alignment requirements.
>
> I also made `MallocHeader::print_block_on_error` static, as the `this` argument was always equal to the `bad_address`.
This pull request has now been integrated.
Changeset: 7b6ac41a
Author: Johan Sjölen <jsjolen at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/7b6ac41ab115f0fb715d32b19bec184ed53d0cd7
Stats: 66 lines in 6 files changed: 36 ins; 15 del; 15 mod
8286876: NMT.test_unaliged_block_address_vm_assert fails if using clang toolchain
Reviewed-by: stuefe, gziemski
-------------
PR: https://git.openjdk.org/jdk/pull/11465
More information about the hotspot-runtime-dev
mailing list