mirror of
https://github.com/MiyooCFW/buildroot.git
synced 2025-09-27 22:24:19 +03:00
Merge from bittboy/buildroot@26c91a9
This commit is contained in:
233
package/odb/0010-Add-initial-support-for-GCC-9.patch
Normal file
233
package/odb/0010-Add-initial-support-for-GCC-9.patch
Normal file
@@ -0,0 +1,233 @@
|
||||
From cd9a15f42ef35449a8ad480352f9f5495eb37c30 Mon Sep 17 00:00:00 2001
|
||||
From: Boris Kolpackov <boris@codesynthesis.com>
|
||||
Date: Fri, 15 Mar 2019 17:37:28 +0200
|
||||
Subject: [PATCH] Add initial support for GCC 9
|
||||
|
||||
[Upstream: 841140bbf13ae2bfaa5978a181718cda0a8edae7]
|
||||
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
|
||||
---
|
||||
odb/cxx-lexer.cxx | 33 +++++++++++++++++++++++++++------
|
||||
odb/gcc.hxx | 32 ++++++++++++++++++++++++++++++++
|
||||
odb/include.cxx | 3 +++
|
||||
odb/plugin.cxx | 45 ++++++++++++++++++++++++++++++---------------
|
||||
4 files changed, 92 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/odb/cxx-lexer.cxx b/odb/cxx-lexer.cxx
|
||||
index cfebbb5..acd13be 100644
|
||||
--- a/odb/cxx-lexer.cxx
|
||||
+++ b/odb/cxx-lexer.cxx
|
||||
@@ -143,12 +143,20 @@ translate ()
|
||||
// Diagnostics callback.
|
||||
//
|
||||
extern "C" bool
|
||||
-cpp_error_callback (
|
||||
+cpp_diagnostic_callback (
|
||||
cpp_reader* reader,
|
||||
+#if BUILDING_GCC_MAJOR >= 9
|
||||
+ cpp_diagnostic_level level,
|
||||
+#else
|
||||
int level,
|
||||
+#endif
|
||||
#if BUILDING_GCC_MAJOR > 4 || BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR > 5
|
||||
+#if BUILDING_GCC_MAJOR >= 9
|
||||
+ cpp_warning_reason,
|
||||
+#else
|
||||
int /*reason*/, // Added in GCC 4.6.0.
|
||||
#endif
|
||||
+#endif
|
||||
#if BUILDING_GCC_MAJOR <= 5
|
||||
location_t,
|
||||
unsigned int,
|
||||
@@ -185,10 +193,14 @@ cpp_error_callback (
|
||||
vfprintf (stderr, msg, *ap);
|
||||
fprintf (stderr, "\n");
|
||||
|
||||
- // By resetting the error callback we indicate to cxx_string_lexer
|
||||
- // that there was an error.
|
||||
+ // By resetting the callback we indicate to cxx_string_lexer that there
|
||||
+ // was an error.
|
||||
//
|
||||
+#if BUILDING_GCC_MAJOR >= 9
|
||||
+ cpp_get_callbacks (reader)->diagnostic = 0;
|
||||
+#else
|
||||
cpp_get_callbacks (reader)->error = 0;
|
||||
+#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -247,7 +259,12 @@ start (string const& data)
|
||||
// The previous lexing session should have popped the buffer.
|
||||
//
|
||||
assert (cpp_get_buffer (reader_) == 0);
|
||||
- callbacks_->error = &cpp_error_callback;
|
||||
+
|
||||
+#if BUILDING_GCC_MAJOR >= 9
|
||||
+ callbacks_->diagnostic = &cpp_diagnostic_callback;
|
||||
+#else
|
||||
+ callbacks_->error = &cpp_diagnostic_callback;
|
||||
+#endif
|
||||
|
||||
data_ = data;
|
||||
buf_ = data;
|
||||
@@ -267,10 +284,14 @@ next (string& token, tree* node)
|
||||
token.clear ();
|
||||
cpp_token const* t (cpp_get_token (reader_));
|
||||
|
||||
- // If there was an error, the error callback will be reset to 0.
|
||||
- // Diagnostics has already been issued.
|
||||
+ // If there was an error, the callback will be reset to 0. Diagnostics has
|
||||
+ // already been issued.
|
||||
//
|
||||
+#if BUILDING_GCC_MAJOR >= 9
|
||||
+ if (callbacks_->diagnostic == 0)
|
||||
+#else
|
||||
if (callbacks_->error == 0)
|
||||
+#endif
|
||||
throw invalid_input ();
|
||||
|
||||
cpp_ttype tt (t->type);
|
||||
diff --git a/odb/gcc.hxx b/odb/gcc.hxx
|
||||
index a22357d..0304192 100644
|
||||
--- a/odb/gcc.hxx
|
||||
+++ b/odb/gcc.hxx
|
||||
@@ -158,4 +158,36 @@ gcc_tree_code_name (gcc_tree_code_type tc) {return tree_code_name[tc];}
|
||||
# define anon_aggrname_p(X) ANON_AGGRNAME_P(X)
|
||||
#endif
|
||||
|
||||
+// In GCC 9:
|
||||
+//
|
||||
+// INCLUDED_FROM Became linemap_included_from_linemap().
|
||||
+// LAST_SOURCE_LINE Was removed apparently as no longer used. Studying
|
||||
+// the line-map.h diff from 8.3 suggests that the old
|
||||
+// implementation should still work.
|
||||
+//
|
||||
+#if BUILDING_GCC_MAJOR >= 9
|
||||
+
|
||||
+inline const line_map_ordinary*
|
||||
+INCLUDED_FROM (line_maps* set, const line_map_ordinary* map)
|
||||
+{
|
||||
+ return linemap_included_from_linemap (set, map);
|
||||
+}
|
||||
+
|
||||
+inline source_location
|
||||
+LAST_SOURCE_LINE_LOCATION (const line_map_ordinary* map)
|
||||
+{
|
||||
+ return (((map[1].start_location - 1
|
||||
+ - map->start_location)
|
||||
+ & ~((1 << map->m_column_and_range_bits) - 1))
|
||||
+ + map->start_location);
|
||||
+}
|
||||
+
|
||||
+inline linenum_type
|
||||
+LAST_SOURCE_LINE (const line_map_ordinary* map)
|
||||
+{
|
||||
+ return SOURCE_LINE (map, LAST_SOURCE_LINE_LOCATION (map));
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
#endif // ODB_GCC_HXX
|
||||
diff --git a/odb/include.cxx b/odb/include.cxx
|
||||
index 08c93ce..0082f5e 100644
|
||||
--- a/odb/include.cxx
|
||||
+++ b/odb/include.cxx
|
||||
@@ -584,6 +584,9 @@ namespace
|
||||
|
||||
for (include_map::iterator i (imap.begin ()), e (imap.end ()); i != e; ++i)
|
||||
{
|
||||
+ // Note that the LAST_SOURCE_LINE value of a map that includes another
|
||||
+ // map is the line of that include.
|
||||
+
|
||||
/*
|
||||
cerr << endl
|
||||
<< i->first << " included from" << endl;
|
||||
diff --git a/odb/plugin.cxx b/odb/plugin.cxx
|
||||
index 0fac632..892f27c 100644
|
||||
--- a/odb/plugin.cxx
|
||||
+++ b/odb/plugin.cxx
|
||||
@@ -44,10 +44,15 @@ paths profile_paths_;
|
||||
path file_; // File being compiled.
|
||||
paths inputs_; // List of input files in at-once mode or just file_.
|
||||
|
||||
-bool (*cpp_error_prev) (
|
||||
+bool (*cpp_diagnostic_prev) (
|
||||
cpp_reader*,
|
||||
+#if BUILDING_GCC_MAJOR >= 9
|
||||
+ cpp_diagnostic_level,
|
||||
+ cpp_warning_reason,
|
||||
+#else
|
||||
int,
|
||||
int,
|
||||
+#endif
|
||||
#if BUILDING_GCC_MAJOR >= 6
|
||||
rich_location*,
|
||||
#else
|
||||
@@ -58,17 +63,22 @@ bool (*cpp_error_prev) (
|
||||
va_list*);
|
||||
|
||||
static bool
|
||||
-cpp_error_filter (cpp_reader* r,
|
||||
- int level,
|
||||
- int reason,
|
||||
+cpp_diagnostic_filter (cpp_reader* r,
|
||||
+#if BUILDING_GCC_MAJOR >= 9
|
||||
+ cpp_diagnostic_level level,
|
||||
+ cpp_warning_reason reason,
|
||||
+#else
|
||||
+ int level,
|
||||
+ int reason,
|
||||
+#endif
|
||||
#if BUILDING_GCC_MAJOR >= 6
|
||||
- rich_location* l,
|
||||
+ rich_location* l,
|
||||
#else
|
||||
- location_t l,
|
||||
- unsigned int column_override,
|
||||
+ location_t l,
|
||||
+ unsigned int column_override,
|
||||
#endif
|
||||
- const char* msg,
|
||||
- va_list* ap)
|
||||
+ const char* msg,
|
||||
+ va_list* ap)
|
||||
{
|
||||
// #pragma once in the main file. Note that the message that we get is
|
||||
// potentially translated so we search for the substring (there is
|
||||
@@ -80,7 +90,7 @@ cpp_error_filter (cpp_reader* r,
|
||||
if (strstr (msg, "#pragma once") != 0)
|
||||
return true;
|
||||
|
||||
- return cpp_error_prev (
|
||||
+ return cpp_diagnostic_prev (
|
||||
r,
|
||||
level,
|
||||
reason,
|
||||
@@ -119,15 +129,20 @@ start_unit_callback (void*, void*)
|
||||
//
|
||||
cpp_callbacks* cb (cpp_get_callbacks (parse_in));
|
||||
|
||||
- if (cb->error == 0)
|
||||
+#if BUILDING_GCC_MAJOR >= 9
|
||||
+ cpp_diagnostic_prev = cb->diagnostic;
|
||||
+ cb->diagnostic = &cpp_diagnostic_filter;
|
||||
+#else
|
||||
+ cpp_diagnostic_prev = cb->error;
|
||||
+ cb->error = &cpp_diagnostic_filter;
|
||||
+#endif
|
||||
+
|
||||
+ if (cpp_diagnostic_prev == 0)
|
||||
{
|
||||
- cerr << "ice: expected cpp error callback to be set" << endl;
|
||||
+ cerr << "ice: expected cpp diagnostic callback to be set" << endl;
|
||||
exit (1);
|
||||
}
|
||||
|
||||
- cpp_error_prev = cb->error;
|
||||
- cb->error = &cpp_error_filter;
|
||||
-
|
||||
// Set the directory of the main file (stdin) to that of the orginal
|
||||
// file so that relative inclusion works. Also adjust the path and
|
||||
// re-stat the file so that #pragma once works.
|
||||
--
|
||||
2.25.0
|
||||
|
||||
Reference in New Issue
Block a user