This is an archive of the discontinued LLVM Phabricator instance.

Make GCC in C++03 Unsupported
ClosedPublic

Authored by EricWF on Jun 11 2019, 11:14 AM.

Details

Summary

This patch make G++03 explicitly unsupported with libc++, as discussed on the mailing lists.

Below is the rational for this decision.

libc++ claims to support GCC with C++03 ("G++03"), and this is a problem for our users.

Our C++03 users are all using Clang. They must be. Less than 9% of the C++03 tests pass with GCC [1][2]. No non-trivial C++ program could work.

Attempting to support G++03 impacts our QoI considerably. Unlike Clang, G++03 offers almost no C++11 extensions. If we could remove all the fallbacks for G++03, it would mean libc++ could::

  • Improve Correctness:

Every #ifdef _LIBCPP_HAS_NO_<C++11-feature> is a bug manifest. It exists to admit for deviant semantics.

  • Achieve ABI stability between C++03 and C++11

Differences between our C++03 and C++Rest branches contain ABI bugs. For example std::nullptr_t and std::function::operator()(...) are currently incompatible between C++11 and C++03, but could be fixed.

  • Decrease Compile Times and Memory Usage:

Writing efficient SFINAE requires C++11. Using alias templates, libc++ could reduce the number of instantiations it produces substantially.

  • Decrease Binary Size

Similar to the last point, G++03 forces metaprogramming techniques that emit more debug information [3] [4]. Compared to libstdc++, debug information size increases of +10% are not uncommon.

Diff Detail

Event Timeline

EricWF created this revision.Jun 11 2019, 11:14 AM

A few things:

  • Can / should we update lit or the lit config?
  • When I run the tests in gnu++03 mode, I don't get error "libc++ does not support using GCC with C++03. Please enable C++11". Maybe I am doing something wrong, though.
  • In all fairness, the reason (most of) the tests fail is not because of g++03 but because they are disabled for c++03 and not gnu++03.
EricWF accepted this revision.Jun 12 2019, 1:26 PM

I plan to commit this shortly.

This is a louder and farther reaching way to announce the GCC C++03 support drop.

This revision is now accepted and ready to land.Jun 12 2019, 1:26 PM
ldionne accepted this revision.Jun 12 2019, 1:30 PM
This revision was automatically updated to reflect the committed changes.
Herald added a project: Restricted Project. · View Herald TranscriptJun 12 2019, 5:34 PM