Bug 21371 – core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only)

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P1
Component
druntime
Product
D
Version
D2
Platform
All
OS
Windows
Creation time
2020-11-09T05:34:06Z
Last change time
2021-04-18T14:24:29Z
Keywords
pull
Assigned to
No Owner
Creator
Nathan S.

Comments

Comment #0 by n8sh.secondary — 2020-11-09T05:34:06Z
This bug resulted in assertion failures when deleting large blocks of memory using core.stdcpp.allocator on Microsoft Windows. _Allocate_manually_vector_aligned sets a sentinel when version(_DEBUG). _Adjust_manually_vector_aligned checks for this sentinel when assertions are enabled without checking version(_DEBUG).
Comment #1 by dlang-bot — 2020-11-09T05:42:00Z
@n8sh created dlang/druntime pull request #3265 "core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only)" fixing this issue: - Fix Issue 21371 - core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only) This bug resulted in assertion failures when deleting large blocks of memory using core.stdcpp.allocator on Windows. _Allocate_manually_vector_aligned only sets a sentinel when version(_DEBUG) so _Adjust_manually_vector_aligned should only check for this sentinel when version(_DEBUG). Additionally change the linkage of those functions from C++ to D to avoid possible linker confusion. https://github.com/dlang/druntime/pull/3265
Comment #2 by dlang-bot — 2021-03-18T13:55:57Z
dlang/druntime pull request #3265 "core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only)" was merged into stable: - c97b571c084ecd097a2d19f86a175085efec95a7 by Nathan Sashihara: Fix Issue 21371 - core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only) This bug resulted in assertion failures when deleting large blocks of memory using core.stdcpp.allocator on Windows. _Allocate_manually_vector_aligned only sets a sentinel when version(_DEBUG) so _Adjust_manually_vector_aligned should only check for this sentinel when version(_DEBUG). Additionally change the linkage of those functions from C++ to D to avoid possible linker confusion. Also changed the logic by which allocator.d infers _DEBUG to resemble the the logic for _ITERATOR_DEBUG_LEVEL in utility.d. https://github.com/dlang/druntime/pull/3265
Comment #3 by dlang-bot — 2021-04-18T14:24:29Z
dlang/druntime pull request #3434 "merge stable" was merged into master: - 74287fbe7867896b23eeb01f5663ade8ea0d49e0 by Nathan Sashihara: Fix Issue 21371 - core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only) This bug resulted in assertion failures when deleting large blocks of memory using core.stdcpp.allocator on Windows. _Allocate_manually_vector_aligned only sets a sentinel when version(_DEBUG) so _Adjust_manually_vector_aligned should only check for this sentinel when version(_DEBUG). Additionally change the linkage of those functions from C++ to D to avoid possible linker confusion. Also changed the logic by which allocator.d infers _DEBUG to resemble the the logic for _ITERATOR_DEBUG_LEVEL in utility.d. https://github.com/dlang/druntime/pull/3434