curdeius requested changes to this revision.
curdeius added inline comments.
This revision now requires changes to proceed.


================
Comment at: libcxx/include/cstdalign:24
+#include <__config>
+#include <stdalign.h>
+
----------------
hubert.reinterpretcast wrote:
> curdeius wrote:
> > curdeius wrote:
> > > hubert.reinterpretcast wrote:
> > > > sbc100 wrote:
> > > > > hubert.reinterpretcast wrote:
> > > > > > This seems to be assuming that the underlying C library's 
> > > > > > `stdalign.h` is C++ friendly. A C11 `stdalign.h` //does// define 
> > > > > > `alignof` and `alignas` as macros.
> > > > > Should I just remove this `#include` then?
> > > > The idea would be to //add// a `stdalign.h` alongside this header that 
> > > > doesn't `#include_next` the underlying C library's `stdalign.h`.
> > > I'm not sure if that should be the solution. At least gcc's libstdc++ 
> > > assumes that `stdalign.h` is C++-compatbile (cf. 
> > > https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/libstdc%2B%2B-v3/include/c_global/cstdalign).
> > > 
> > > Clang provides a compatible header: 
> > > https://github.com/llvm/llvm-project/commit/8acb4044d83ecc9df81b1c9f327d5bd4325e1756.
> > > Gcc too of course: 
> > > https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/gcc/ginclude/stdalign.h.
> > > 
> > > MSVC's STL on the other hand, doesn't include `<stdalign.h>` 
> > > (https://github.com/microsoft/STL/blob/main/stl/inc/cstdalign).
> > > 
> > > @hubert.reinterpretcast, are you aware of an environment which has 
> > > non-friendly `stdalign.h`?
> > FYI, musl is also C++ friendly: 
> > https://git.musl-libc.org/cgit/musl/tree/include/stdalign.h.
> >>! Quote:
> > @hubert.reinterpretcast, are you aware of an environment which has 
> > non-friendly stdalign.h?
> 
> The one GCC provides disagrees with the interpretation I gave of which macros 
> should be present. The one that Clang provides //does// match my 
> interpretation. It seems the GCC one is non-friendly (albeit a different form 
> of non-friendly than the one I opened with).
Oh, you mean that `__alignas_is_defined` and `__alignof_is_defined` won't be 
defined in this case, right?
In this case, I guess we won't avoid having `stdalign.h` as you had suggested.
And indeed the test fails with gcc:
```
bin/llvm-lit -vv ../../libcxx/test/std/language.support/cstdalign/ 
--param=std=c++17 --param=cxx_under_test=`which g++`
...
libcxx/test/std/language.support/cstdalign/cstdalign.pass.cpp:21:2: error: 
#error __alignas_is_defined not defined
   21 | #error __alignas_is_defined not defined
      |  ^~~~~
```

That's unfortunately a configuration which is not tested in the CI.


================
Comment at: libcxx/test/std/language.support/cstdalign/cstdalign.pass.cpp:16-18
+#ifdef alignas
+#error alignas should not be a macro in C++
+#endif
----------------
Please do the same for `alignof`.


================
Comment at: libcxx/test/std/language.support/cstdalign/cstdalign.pass.cpp:27
+#ifndef __alignof_is_defined
+#error __alignof_is_defined not defined
+#endif
----------------
hubert.reinterpretcast wrote:
> sbc100 wrote:
> > hubert.reinterpretcast wrote:
> > > sbc100 wrote:
> > > > ldionne wrote:
> > > > > I'm not seeing `__alignof_is_defined` anywhere in the spec?
> > > > Removed
> > > Seems like a defect in the old standard. The prose doesn't match the 
> > > synopsis. `__alignof_is_defined` is a macro in C11's `stdalign.h` (and so 
> > > is `alignof`). That the C++ committee did not intend for an `alignof` 
> > > macro can probably be assumed. I suspect the lack of an 
> > > `__alignof_is_defined` macro was also unintended.
> > So should I add back the check for `__alignof_is_defined`?
> I think so (in addition to also checking that `alignof` is not defined as a 
> macro). I think the patch needs to be confirmed again either way by the 
> libc++ approvers though.
Please check `__alignof_is_defined` as well, but guard it with `#ifdef 
_LIBCPP_VERSION` to be conforming.
I agree that it seems to be a defect in the old standard.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D46443/new/

https://reviews.llvm.org/D46443

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to