joerg added a comment.

In D73245#1918287 <https://reviews.llvm.org/D73245#1918287>, @ldionne wrote:

> In D73245#1918148 <https://reviews.llvm.org/D73245#1918148>, @EricWF wrote:
>
> > I've already stated my disapproval of this patch. Libc++ has never and will 
> > never provide nor value C++03 conformance.
> >  Moving backwards to C++03 is inconsistent with the libraries general 
> > direction.
>
>
> @EricWF makes a point here, we want to move away from C++03.


Removing or breaking C++03 compatibility is actively harmful for that. Speaking 
as a system integrator, a STL implementation that can't deal in a reasonable 
way with the existing C++03 code base is useless. It's a nice ivory tower 
assumption that old code will just disappear if you wish for it enough, but it 
doesn't reflect well on the reality. Especially given the various ways can and 
does fail when compiled for C++11 or later. Having to switch between different 
STL implementations doesn't help anyone in the process of modernizing a code 
base, especially when interacting with code that needs large semi-intrusive 
changes to work in C++11 mode. As a most basic issue, it makes it much harder 
to separate issues with the STL implementation (i.e. depending on 
implementation-defined behavior) from semantic changes in the core language 
(i.e. noexcept dtors, auto) and mechanical changes (e.g. UDL)

>> This patch disables tests, which could hide bugs, including serious ABI 
>> differences between dialects.
>> 
>> I would like to unbreak compilation on NetBSD. But all that's needed there 
>> is to provide our own correct declaration of max_align_t.
>>  I don't see why C++03 conformance is a necessary condition.
> 
> Is there anything that can be done on the NetBSD side to solve this? 
> Basically, just imagine that libc++ doesn't provide a C++03 mode at all -- 
> what would you do then? I think that's the right mindset to solve this 
> specific problem.

Can you both please go back to look at the core of the issue? The current 
behavior of libc++ is at best an ODR violation on ALL platforms. This is not a 
problem specific to NetBSD at all, it has just been exposed as a different 
error on NetBSD. The documented behavior of libc++ is to provide C++03 
compatibility as much as possible when it doesn't conflict with C++11 and the 
compiler (clang) supports the necessary language feature. max_align_t is not 
provided by clang in C++03 nor is it provided by GCC.  Now there are different 
options for fixes, but it is very frustrating to me that the primary feedback 
so far is "Don't use C++03" and therefore not helpful at all.  As I said 
before, libc++ cares about max_align_t exactly for one purpose: whether 
overaligned types need special allocators. Now C++03 normally can't depend on 
the implementation to do something useful in this case, simply because the 
environment doesn't have the necessary means. So it all boils down to what is 
the least intrusive and potentially most well testable mechanism. The core of 
the patch provides one answer for that. If the compiler supports telling us the 
default alignment for new, use it just like we would in C++11 mode. A 
constructive feedback would now be an answer to the question of whether we care 
about libc++ use with compilers that do not provide that macro for C++03 mode. 
I don't know how useful libc++ in C++03 mode is for any compiler except clang 
and as I wrote, we document the primary target being clang. As such the primary 
question is whether we care about compatibility with older versions of clang 
and modern libc++.  If we don't, the change to `<new>` becomes much simpler as 
it can just bail out and the corresponding testing becomes easier as well, 
since it would only have to assert that max_align_t is aligned less strictly 
than the platform allocator. It would solve the core issue that we provide a 
max_align_t when we don't know what it should be and actively disagree with the 
max_align_t we provide for the other dialects.


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

https://reviews.llvm.org/D73245



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

Reply via email to