Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 883744 Details for
Bug 912035
sys-devel/gcc: compilation failure with libc++ 17
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
50_all_PR111632_system_cxx_headers_libcxx.patch (text/plain), 7.96 KB, created by
Violet Purcell
on 2024-01-30 18:48:26 UTC
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Violet Purcell
Created:
2024-01-30 18:48:26 UTC
Size:
7.96 KB
patch
obsolete
>https://bugs.gentoo.org/912035 >https://inbox.sourceware.org/gcc-patches/0623E896-6B99-49EC-9144-B41BC51089F0@andric.com >https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=274038 >https://gcc.gnu.org/PR111632 > >commit 8992952bfa95e769a554bd97581cf332987383d8 >Author: Dimitry Andric <dimitry@andric.com> >Date: 2023-09-28T17:40:29+02:00 > > Include safe-ctype.h after C++ standard headers, to avoid over-poisoning > > When building gcc's C++ sources against recent libc++, the poisoning of > the ctype macros due to including safe-ctype.h before including C++ > standard headers such as <list>, <map>, etc, causes many compilation > errors, similar to: > > In file included from /home/dim/src/gcc/master/gcc/gensupport.cc:23: > In file included from /home/dim/src/gcc/master/gcc/system.h:233: > In file included from /usr/include/c++/v1/vector:321: > In file included from > /usr/include/c++/v1/__format/formatter_bool.h:20: > In file included from > /usr/include/c++/v1/__format/formatter_integral.h:32: > In file included from /usr/include/c++/v1/locale:202: > /usr/include/c++/v1/__locale:546:5: error: '__abi_tag__' attribute > only applies to structs, variables, functions, and namespaces > 546 | _LIBCPP_INLINE_VISIBILITY > | ^ > /usr/include/c++/v1/__config:813:37: note: expanded from macro > '_LIBCPP_INLINE_VISIBILITY' > 813 | # define _LIBCPP_INLINE_VISIBILITY _LIBCPP_HIDE_FROM_ABI > | ^ > /usr/include/c++/v1/__config:792:26: note: expanded from macro > '_LIBCPP_HIDE_FROM_ABI' > 792 | > __attribute__((__abi_tag__(_LIBCPP_TOSTRING( > _LIBCPP_VERSIONED_IDENTIFIER)))) > | ^ > In file included from /home/dim/src/gcc/master/gcc/gensupport.cc:23: > In file included from /home/dim/src/gcc/master/gcc/system.h:233: > In file included from /usr/include/c++/v1/vector:321: > In file included from > /usr/include/c++/v1/__format/formatter_bool.h:20: > In file included from > /usr/include/c++/v1/__format/formatter_integral.h:32: > In file included from /usr/include/c++/v1/locale:202: > /usr/include/c++/v1/__locale:547:37: error: expected ';' at end of > declaration list > 547 | char_type toupper(char_type __c) const > | ^ > /usr/include/c++/v1/__locale:553:48: error: too many arguments > provided to function-like macro invocation > 553 | const char_type* toupper(char_type* __low, const > char_type* __high) const > | ^ > /home/dim/src/gcc/master/gcc/../include/safe-ctype.h:146:9: note: > macro 'toupper' defined here > 146 | #define toupper(c) do_not_use_toupper_with_safe_ctype > | ^ > > This is because libc++ uses different transitive includes than > libstdc++, and some of those transitive includes pull in various ctype > declarations (typically via <locale>). > > There was already a special case for including <string> before > safe-ctype.h, so move the rest of the C++ standard header includes to > the same location, to fix the problem. > > Signed-off-by: Dimitry Andric <dimitry@andric.com> > >diff --git a/gcc/system.h b/gcc/system.h >index e924152ad4c..7a516b11438 100644 >--- a/gcc/system.h >+++ b/gcc/system.h >@@ -194,27 +194,8 @@ extern int fprintf_unlocked (FILE *, const char *, ...); > #undef fread_unlocked > #undef fwrite_unlocked > >-/* Include <string> before "safe-ctype.h" to avoid GCC poisoning >- the ctype macros through safe-ctype.h */ >- >-#ifdef __cplusplus >-#ifdef INCLUDE_STRING >-# include <string> >-#endif >-#endif >- >-/* There are an extraordinary number of issues with <ctype.h>. >- The last straw is that it varies with the locale. Use libiberty's >- replacement instead. */ >-#include "safe-ctype.h" >- >-#include <sys/types.h> >- >-#include <errno.h> >- >-#if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO >-extern int errno; >-#endif >+/* Include C++ standard headers before "safe-ctype.h" to avoid GCC >+ poisoning the ctype macros through safe-ctype.h */ > > #ifdef __cplusplus > #if defined (INCLUDE_ALGORITHM) || !defined (HAVE_SWAP_IN_UTILITY) >@@ -229,6 +210,9 @@ extern int errno; > #ifdef INCLUDE_SET > # include <set> > #endif >+#ifdef INCLUDE_STRING >+# include <string> >+#endif > #ifdef INCLUDE_VECTOR > # include <vector> > #endif >@@ -245,6 +229,19 @@ extern int errno; > # include <type_traits> > #endif > >+/* There are an extraordinary number of issues with <ctype.h>. >+ The last straw is that it varies with the locale. Use libiberty's >+ replacement instead. */ >+#include "safe-ctype.h" >+ >+#include <sys/types.h> >+ >+#include <errno.h> >+ >+#if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO >+extern int errno; >+#endif >+ > /* Some of glibc's string inlines cause warnings. Plus we'd rather > rely on (and therefore test) GCC's string builtins. */ > #define __NO_STRING_INLINES > --- a/gcc/jit/dummy-frontend.cc >+++ b/gcc/jit/dummy-frontend.cc >@@ -18,6 +18,8 @@ along with GCC; see the file COPYING3. > <http://www.gnu.org/licenses/>. */ > > #include "config.h" >+#define INCLUDE_STRING >+#define INCLUDE_VECTOR > #include "system.h" > #include "coretypes.h" > #include "jit-playback.h" >--- a/gcc/jit/jit-builtins.cc >+++ b/gcc/jit/jit-builtins.cc >@@ -18,6 +18,8 @@ along with GCC; see the file COPYING3. > <http://www.gnu.org/licenses/>. */ > > #include "config.h" >+#define INCLUDE_STRING >+#define INCLUDE_VECTOR > #include "system.h" > #include "coretypes.h" > #include "target.h" >--- a/gcc/jit/jit-playback.cc >+++ b/gcc/jit/jit-playback.cc >@@ -20,6 +20,8 @@ along with GCC; see the file COPYING3. > > #include "config.h" > #define INCLUDE_MUTEX >+#define INCLUDE_STRING >+#define INCLUDE_VECTOR > #include "libgccjit.h" > #include "system.h" > #include "coretypes.h" >--- a/gcc/jit/jit-playback.h >+++ b/gcc/jit/jit-playback.h >@@ -21,10 +21,9 @@ along with GCC; see the file COPYING3. > #ifndef JIT_PLAYBACK_H > #define JIT_PLAYBACK_H > >-#include <string> >-#include <utility> // for std::pair >-#include <vector> >- >+#define INCLUDE_STRING >+#define INCLUDE_VECTOR >+#include "system.h" > #include "timevar.h" > #include "varasm.h" > >--- a/gcc/jit/jit-recording.cc >+++ b/gcc/jit/jit-recording.cc >@@ -19,6 +19,9 @@ along with GCC; see the file COPYING3. > <http://www.gnu.org/licenses/>. */ > > #include "config.h" >+#define INCLUDE_SSTREAM >+#define INCLUDE_STRING >+#define INCLUDE_VECTOR > #include "system.h" > #include "coretypes.h" > #include "tm.h" >@@ -29,7 +32,6 @@ along with GCC; see the file COPYING3. > #include "jit-builtins.h" > #include "jit-recording.h" > #include "jit-playback.h" >-#include <sstream> > > namespace gcc { > namespace jit { >--- a/gcc/jit/jit-recording.h >+++ b/gcc/jit/jit-recording.h >@@ -21,12 +21,12 @@ along with GCC; see the file COPYING3. > #ifndef JIT_RECORDING_H > #define JIT_RECORDING_H > >+#define INCLUDE_STRING >+#define INCLUDE_VECTOR > #include "jit-common.h" > #include "jit-logging.h" > #include "libgccjit.h" >- >-#include <string> >-#include <vector> >+#include "system.h" > > class timer; > >--- a/gcc/jit/libgccjit.cc >+++ b/gcc/jit/libgccjit.cc >@@ -20,6 +20,8 @@ along with GCC; see the file COPYING3. > > #include "config.h" > #define INCLUDE_MUTEX >+#define INCLUDE_STRING >+#define INCLUDE_VECTOR > #include "system.h" > #include "coretypes.h" > #include "timevar.h" >--- a/libcc1/libcc1plugin.cc >+++ b/libcc1/libcc1plugin.cc >@@ -32,6 +32,7 @@ > #undef PACKAGE_VERSION > > #define INCLUDE_MEMORY >+#define INCLUDE_VECTOR > #include "gcc-plugin.h" > #include "system.h" > #include "coretypes.h" >@@ -69,8 +70,6 @@ > #include "gcc-c-interface.h" > #include "context.hh" > >-#include <vector> >- > using namespace cc1_plugin; > > > >--- a/libcc1/libcp1plugin.cc >+++ b/libcc1/libcp1plugin.cc >@@ -33,6 +33,7 @@ > #undef PACKAGE_VERSION > > #define INCLUDE_MEMORY >+#define INCLUDE_VECTOR > #include "gcc-plugin.h" > #include "system.h" > #include "coretypes.h" >@@ -71,8 +72,6 @@ > #include "rpc.hh" > #include "context.hh" > >-#include <vector> >- > using namespace cc1_plugin;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 912035
:
867578
|
867579
|
867580
| 883744