Send MinGW-Notify mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
https://lists.osdn.me/mailman/listinfo/mingw-notify
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of MinGW-Notify digest..."
Please do not reply to this notification; the sender address is unable to
accept incoming e-mail. If you wish to unsubscribe you can do so at
https://lists.osdn.me/mailman/listinfo/mingw-notify.
Today's Topics:
1. [mingw] #38607: Improved standards support for aligned memory
allocators (MinGW Notification List)
2. [mingw] #40315: c++17 std::aligned_alloc (MinGW Notification List)
----------------------------------------------------------------------
Message: 1
Date: Sun, 19 Apr 2020 14:03:02 +0100
From: MinGW Notification List <[email protected]>
To: OSDN Ticket System <[email protected]>
Subject: [MinGW-Notify] [mingw] #38607: Improved standards support for
aligned memory allocators
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
#38607: Improved standards support for aligned memory allocators
Open Date: 2018-09-17 19:25
Last Update: 2020-04-19 14:03
URL for this Ticket:
https://osdn.net//projects/mingw/ticket/38607
RSS feed for this Ticket:
https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=38607
---------------------------------------------------------------------
Last Changes/Comment on this Ticket:
2020-04-19 14:03 Updated by: keith
Comment:
I've simplified the previous implementation of both the ISO-C11 aligned_alloc
(), and the POSIX.1-2001 posix_memalign() functions, and separated them into
two individual patches; please note that the latter is dependent on the former,
to the extent that the former substitutes __mingw_free() and __mingw_realloc()
for free() and realloc() respectively.
---------------------------------------------------------------------
Ticket Status:
Reporter: keith
Owner: (None)
Type: Feature Request
Status: Open
Priority: 5 - Medium
MileStone: (None)
Component: WSL
Severity: 5 - Medium
Resolution: None
---------------------------------------------------------------------
Ticket details:
Microsoft introduced _aligned_malloc(), and associated functions, with
MSVCR70.DLL. Although subsequently supported in MSVCRT.DLL, from WinXP onwards,
exposure of these APIs interferes with a clean build of GCC — not only insofar
as, having detected presence of the APIs, GCC would become dependent on WinXP
and later, thus needlessly breaking legacy support, but furthermore, the GCC
sources neglect to include the requisite <malloc.h> header file, and thus do
not build cleanly.
Legacy support for similar APIs was added to MinGW, in 2003/2004, under feature
request #260; however, it may be ill-advised to make GCC dependent on these
MinGW specific APIs, for the following reasons:—
1. A patch, to incorporate them, would be unlikely to be accepted upstream.
2. If the APIs are not detected, GCC will provide its own replacement
functions.
3. A review reveals potential flaws in the MinGW implementation.
Consequently, I suggest:—
1. **Not** exposing the Microsoft APIs in libmsvcrt.a
2. Reworking the MinGW implementation, to address potential flaws.
3. Consider adding support for ISO-C11's aligned_alloc() and POSIX.1's
posix_memalign() APIs.
--
Ticket information of MinGW - Minimalist GNU for Windows project
MinGW - Minimalist GNU for Windows Project is hosted on OSDN
Project URL: https://osdn.net/projects/mingw/
OSDN: https://osdn.net
URL for this Ticket:
https://osdn.net/projects/mingw/ticket/38607
RSS feed for this Ticket:
https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=38607
------------------------------
Message: 2
Date: Sun, 19 Apr 2020 22:22:16 +0100
From: MinGW Notification List <[email protected]>
To: OSDN Ticket System <[email protected]>
Subject: [MinGW-Notify] [mingw] #40315: c++17 std::aligned_alloc
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
#40315: c++17 std::aligned_alloc
Open Date: 2020-04-10 05:55
Last Update: 2020-04-19 22:22
URL for this Ticket:
https://osdn.net//projects/mingw/ticket/40315
RSS feed for this Ticket:
https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=40315
---------------------------------------------------------------------
Last Changes/Comment on this Ticket:
2020-04-19 22:22 Updated by: keith
Comment:
Quoting Microsoft's C++ language conformance document:
C11: The Universal CRT implemented the parts of the C11 Standard Library
that are required by C++17, with the exception of C99 strftime() E/O
alternative conversion specifiers, C11 fopen() exclusive mode, and C11
aligned_alloc(). The latter is unlikely to be implemented, because C11
specified aligned_alloc() in a way that's incompatible with the Microsoft
implementation of free(): namely, that free() must be able to handle highly
aligned allocations.
Based on the above, I would be justified in dismissing this as a "won't fix",
(because MinGW is under no obligation to support features which Microsoft have
ruled out, and if they don't support it in the Universal CRT, they definitely
do not support it in MSVCRT.DLL). However, I am reluctant to do so, because,
when this patch, as attached to ticket #38607, is applied to mingwrt's
<stdlib.h>, then your original example code works flawlessly, (thus
demonstrating the fallacy of Microsoft's assertion, when free() itself can be
so easily overridden by a variant — __mingw_free() — which can transparently
handle both normally aligned allocations, and those over-aligned allocations
which originate from a suitably designed allocator — aligned_alloc(), which has
been implemented in terms of __mingw_aligned_offset_malloc()).
---------------------------------------------------------------------
Ticket Status:
Reporter: drakbar
Owner: (None)
Type: Issues
Status: Open
Priority: 5 - Medium
MileStone: (None)
Component: GCC
Severity: 5 - Medium
Resolution: None
---------------------------------------------------------------------
Ticket details:
According to cppreference, the function std::aligned_alloc is apart of C++17.
When trying to compile the example code found at that page, the following
compilation error occurs:
src code
1. #include <cstdio>
2. #include <cstdlib>
3.
4. int main()
5. {
6. int* p1 = static_cast<int*>(std::malloc(10*sizeof *p1));
7. std::printf("default-aligned address: %p\n", static_cast<void*>(p1));
8. std::free(p1);
9.
10. int* p2 = static_cast<int*>(std::aligned_alloc(1024, 1024));
11. std::printf("1024-byte aligned address: %p\n", static_cast<void*>(p2));
12. std::free(p2);
13. }
compilation output
$g++ -std=c++17 alignment.cpp -o main
alignment.cpp: In function 'int main()':
alignment.cpp:10:38: error: 'aligned_alloc' is not a member of 'std'
10 | int* p2 = static_cast<int*>(std::aligned_alloc(1024, 1024));
gcc version
Target: x86_64-w64-mingw32
Configured with: ../gcc-9.3.0/configure --prefix=/mingw64
--with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32
--host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32
--with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include
--libexecdir=/mingw64/lib --enable-bootstrap --with-arch=x86-64
--with-tune=generic --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++
--enable-shared --enable-static --enable-libatomic --enable-threads=posix
--enable-graphite --enable-fully-dynamic-string
--enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes
--disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check
--enable-lto --enable-libgomp --disable-multilib --enable-checking=release
--disable-rpath --disable-win32-registry --disable-nls --disable-werror
--disable-symvers --enable-plugin --with-libiconv --with-system-zlib
--with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64
--with-isl=/mingw64 --with-pkgversion='Rev1, Built by MSYS2 project'
--with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld
Thread model: posix
gcc version 9.3.0 (Rev1, Built by MSYS2 project)
platform
Windows 10 Build: 18362.720
linker version
GNU ld (GNU Binutils) 2.34
mingw version
not quite sure which number is the relevant one in _mingw.h
??
build environment
I have tested using both windows command prompt and the msys-w64 shell, and
both yield the same result
MINGW64_NT-10.0-18362 3.0.7-338.x86_64 2019-07-11 10:58 UTC x86_64 Msys
--
Ticket information of MinGW - Minimalist GNU for Windows project
MinGW - Minimalist GNU for Windows Project is hosted on OSDN
Project URL: https://osdn.net/projects/mingw/
OSDN: https://osdn.net
URL for this Ticket:
https://osdn.net/projects/mingw/ticket/40315
RSS feed for this Ticket:
https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=40315
------------------------------
Subject: Digest Footer
_______________________________________________
MinGW-Notify mailing list
[email protected]
https://lists.osdn.me/mailman/listinfo/mingw-notify
------------------------------
End of MinGW-Notify Digest, Vol 31, Issue 12
********************************************