mstorsjo wrote:

> If I grep through `/usr` for `_aligned_malloc` there are no matches for GCC 
> and Clang guards it based on `_WIN32`:
> 
> ```
> $ grep -R _aligned_malloc /usr -C2
> /usr/lib/clang/20/include/mm_malloc.h-  void *__mallocedMemory;
> /usr/lib/clang/20/include/mm_malloc.h-#if defined(__MINGW32__)
> /usr/lib/clang/20/include/mm_malloc.h:  __mallocedMemory = 
> __mingw_aligned_malloc(__size, __align);
> /usr/lib/clang/20/include/mm_malloc.h-#elif defined(_WIN32)
> /usr/lib/clang/20/include/mm_malloc.h:  __mallocedMemory = 
> _aligned_malloc(__size, __align);
> /usr/lib/clang/20/include/mm_malloc.h-#else
> /usr/lib/clang/20/include/mm_malloc.h-  if (posix_memalign(&__mallocedMemory, 
> __align, __size))
> --
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/x86_64-pc-msys/bits/c++config.h-/*
>  #undef _GLIBCXX_HAVE__ACOSL */
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/x86_64-pc-msys/bits/c++config.h-
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/x86_64-pc-msys/bits/c++config.h:/*
>  Define to 1 if you have the `_aligned_malloc' function. */
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/x86_64-pc-msys/bits/c++config.h-/*
>  #undef _GLIBCXX_HAVE__ALIGNED_MALLOC */
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/x86_64-pc-msys/bits/c++config.h-
> --
> /usr/share/aclocal/ax_check_page_aligned_malloc.m4-# 
> =================================================================================
> /usr/share/aclocal/ax_check_page_aligned_malloc.m4:#  
> https://www.gnu.org/software/autoconf-archive/ax_check_page_aligned_malloc.html
> /usr/share/aclocal/ax_check_page_aligned_malloc.m4-# 
> =================================================================================
> /usr/share/aclocal/ax_check_page_aligned_malloc.m4-#
> ```
> 
> GCC has some `_WIN32` checks with special `__CYGWIN__` condition, but I think 
> these code paths (except `fs_path.h`) are not that relevant:
> 
> ```
> $ grep -R _WIN32 /usr/lib/gcc
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/bits/fs_path.h:#if 
> defined(_WIN32) && !defined(__CYGWIN__)
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/experimental/bits/fs_path.h:#if
>  defined(_WIN32) && !defined(__CYGWIN__)
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/experimental/internet:#if 
> defined _WIN32 && __has_include(<ws2tcpip.h>)
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/parallel/compatibility.h:#if 
> !defined(_WIN32) || defined (__CYGWIN__)
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/parallel/compatibility.h:#if 
> defined (_WIN32) && !defined (__CYGWIN__)
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/x86_64-pc-msys/bits/c++config.h:/*
>  #undef _GLIBCXX_USE_WIN32_SLEEP */
> /usr/lib/gcc/x86_64-pc-msys/13.3.0/include/c++/x86_64-pc-msys/bits/os_defines.h:#define
>  _GLIBCXX_THREAD_ATEXIT_WIN32 1
> ```
> 
> It would be possible to apply similar `&& !defined(__CYGWIN__)` here, but I 
> don't know how many other places would hit the same problem.

I agree; it may be a way to go overall, but not necessarily the primary 
solution here (and it may end up requiring many more tweaks).

> While using Win32 APIs is sometimes necessary, I think defining `_WIN32` is a 
> red flag, although I don't have that much experience with Cygwin.

Yes, I think so too. In this case here, the history seems to be a bit more 
tricky, as this originated as `#define LLVM_ON_WIN32 1` which may have been a 
bit more kosher to do, than an outright `#define _WIN32 1`. The original case 
here might have been fine, when 1865df49960e34cc90d0083b0e0cd4771c0feb35 got 
rid of `LLVM_ON_WIN32` we ended up with a more problematic case here.

> > I presume that the removed codepaths did serve some purpose at some point 
> > initially. Can we dig up that purpose from the git history and recheck 
> > whether it's needed/relevant still at this point.
> 
> It was introduced by 
> [aa63fdf](https://github.com/llvm/llvm-project/commit/aa63fdf3b57ab5701e951b4bf20a9dca3d8da419)
> 
> I'd expect Cygwin API missing the required bits back then, these days it can 
> use the same code as Linux in this file. @jeremyd2019 pointed that out in: 
> [#134494 
> (comment)](https://github.com/llvm/llvm-project/pull/134494#discussion_r2035957416)

Ah, I hadn't read the earlier discussions of these patches (or I have read and 
promptly forgot), now I understand this a bit better. So yeah, I would also 
first have taken the direction of just removing the `#define _WIN32`.

Anyway, the comments from @jeremyd2019 there seal the case here I think. So if 
you update the PR description (i.e. future commit message) explaining why this 
no longer is necessary, I think this PR is good to go!

https://github.com/llvm/llvm-project/pull/138120
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to