initial buildroot for linux 5.15

This commit is contained in:
Huan.Feng
2021-12-06 14:12:13 +08:00
parent d7767d594e
commit 7b6fc358fa
12736 changed files with 508822 additions and 0 deletions
@@ -0,0 +1,30 @@
From f0bbc17aeed1b636782a4b92e8191d90f310d0a2 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Mon, 1 Jun 2015 19:08:33 +0200
Subject: [PATCH] <tm.h> include in gcc.hxx appears to be no longer necessary
On MIPS this file pulls in enum processor which conflicts with
our class processor.
[Upstream: f0bbc17aeed1b636782a4b92e8191d90f310d0a2]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/gcc.hxx | 2 --
1 file changed, 2 deletions(-)
diff --git a/odb/gcc.hxx b/odb/gcc.hxx
index 504b59b..c953047 100644
--- a/odb/gcc.hxx
+++ b/odb/gcc.hxx
@@ -46,8 +46,6 @@ extern "C"
#include <tree.h>
#include <real.h>
-#include <tm.h>
-
#include <cpplib.h>
#include <cp/cp-tree.h>
--
2.26.2
@@ -0,0 +1,444 @@
From 5486c8c85b9cfb92232518b2fadf6d8ed7b332d5 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Wed, 3 Jun 2015 21:35:43 +0200
Subject: [PATCH] Remove gratuitous classes
In the process also get rid of global class processor which conflicts
with enum processor on MIPS.
[Upstream: bbc39ffe31c67506b4c03fc56fa3adcb925b6325]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/context.hxx | 3 ++-
odb/generator.cxx | 24 ++++++++++++------------
odb/generator.hxx | 26 ++++++++------------------
odb/plugin.cxx | 18 +++++++-----------
odb/processor.cxx | 4 ++--
odb/processor.hxx | 22 ++++++----------------
odb/relational/validator.cxx | 6 +++---
odb/relational/validator.hxx | 29 +++++++++--------------------
odb/validator.cxx | 13 ++++++-------
odb/validator.hxx | 28 +++++++++-------------------
10 files changed, 64 insertions(+), 109 deletions(-)
diff --git a/odb/context.hxx b/odb/context.hxx
index 1cf002a..351bc61 100644
--- a/odb/context.hxx
+++ b/odb/context.hxx
@@ -41,7 +41,8 @@ typedef cutl::re::format regex_format;
typedef std::vector<regexsub> regex_mapping;
-//
+// Generic exception thrown to indicate a failure when diagnostics
+// has already been issued (to stderr).
//
class operation_failed {};
diff --git a/odb/generator.cxx b/odb/generator.cxx
index e165faf..6aa5151 100644
--- a/odb/generator.cxx
+++ b/odb/generator.cxx
@@ -58,7 +58,7 @@ namespace
if (!ifs.is_open ())
{
cerr << "error: unable to open '" << p << "' in read mode" << endl;
- throw generator::failed ();
+ throw generator_failed ();
}
}
@@ -70,7 +70,7 @@ namespace
if (!ofs.is_open ())
{
cerr << "error: unable to open '" << p << "' in write mode" << endl;
- throw generator::failed ();
+ throw generator_failed ();
}
}
@@ -118,7 +118,7 @@ namespace
}
}
-void generator::
+void
generate (options const& ops,
features& fts,
semantics::unit& unit,
@@ -259,7 +259,7 @@ generate (options const& ops,
cerr << in_log_path << ": error: wrong database '" <<
old_changelog->database () << "', expected '" << db <<
"'" << endl;
- throw generator::failed ();
+ throw generator_failed ();
}
string sn (ops.schema_name ()[db]);
@@ -268,18 +268,18 @@ generate (options const& ops,
cerr << in_log_path << ": error: wrong schema name '" <<
old_changelog->schema_name () << "', expected '" << sn <<
"'" << endl;
- throw generator::failed ();
+ throw generator_failed ();
}
}
catch (const ios_base::failure& e)
{
cerr << in_log_path << ": read failure" << endl;
- throw failed ();
+ throw generator_failed ();
}
catch (const xml::parsing& e)
{
cerr << e.what () << endl;
- throw failed ();
+ throw generator_failed ();
}
}
@@ -976,12 +976,12 @@ generate (options const& ops,
catch (const ios_base::failure& e)
{
cerr << out_log_path << ": write failure" << endl;
- throw failed ();
+ throw generator_failed ();
}
catch (const xml::serialization& e)
{
cerr << e.what () << endl;
- throw failed ();
+ throw generator_failed ();
}
}
@@ -998,18 +998,18 @@ generate (options const& ops,
{
// Code generation failed. Diagnostics has already been issued.
//
- throw failed ();
+ throw generator_failed ();
}
catch (semantics::invalid_path const& e)
{
cerr << "error: '" << e.path () << "' is not a valid filesystem path"
<< endl;
- throw failed ();
+ throw generator_failed ();
}
catch (fs::error const&)
{
// Auto-removal of generated files failed. Ignore it.
//
- throw failed ();
+ throw generator_failed ();
}
}
diff --git a/odb/generator.hxx b/odb/generator.hxx
index ce49295..e83d94d 100644
--- a/odb/generator.hxx
+++ b/odb/generator.hxx
@@ -11,23 +11,13 @@
#include <odb/features.hxx>
#include <odb/semantics/unit.hxx>
-class generator
-{
-public:
- class failed {};
-
- void
- generate (options const&,
- features&,
- semantics::unit&,
- semantics::path const& file,
- std::vector<semantics::path> const& inputs);
-
- generator () {}
-
-private:
- generator (generator const&);
- generator& operator= (generator const&);
-};
+class generator_failed {};
+
+void
+generate (options const&,
+ features&,
+ semantics::unit&,
+ semantics::path const& file,
+ std::vector<semantics::path> const& inputs);
#endif // ODB_GENERATOR_HXX
diff --git a/odb/plugin.cxx b/odb/plugin.cxx
index e32f225..51f0cb1 100644
--- a/odb/plugin.cxx
+++ b/odb/plugin.cxx
@@ -199,27 +199,23 @@ gate_callback (void*, void*)
parser p (*options_, loc_pragmas_, ns_loc_pragmas_, decl_pragmas_);
auto_ptr<unit> u (p.parse (global_namespace, file_));
-
features f;
// Validate, pass 1.
//
- validator v;
- v.validate (*options_, f, *u, file_, 1);
+ validate (*options_, f, *u, file_, 1);
// Process.
//
- processor pr;
- pr.process (*options_, f, *u, file_);
+ process (*options_, f, *u, file_);
// Validate, pass 2.
//
- v.validate (*options_, f, *u, file_, 2);
+ validate (*options_, f, *u, file_, 2);
// Generate.
//
- generator g;
- g.generate (*options_, f, *u, file_, inputs_);
+ generate (*options_, f, *u, file_, inputs_);
}
catch (cutl::re::format const& e)
{
@@ -239,19 +235,19 @@ gate_callback (void*, void*)
//
r = 1;
}
- catch (validator::failed const&)
+ catch (validator_failed const&)
{
// Diagnostics has aready been issued.
//
r = 1;
}
- catch (processor::failed const&)
+ catch (processor_failed const&)
{
// Diagnostics has aready been issued.
//
r = 1;
}
- catch (generator::failed const&)
+ catch (generator_failed const&)
{
// Diagnostics has aready been issued.
//
diff --git a/odb/processor.cxx b/odb/processor.cxx
index a808a52..3a2cb1d 100644
--- a/odb/processor.cxx
+++ b/odb/processor.cxx
@@ -3064,7 +3064,7 @@ namespace
};
}
-void processor::
+void
process (options const& ops,
features& f,
semantics::unit& unit,
@@ -3120,6 +3120,6 @@ process (options const& ops,
{
// Processing failed. Diagnostics has already been issued.
//
- throw failed ();
+ throw processor_failed ();
}
}
diff --git a/odb/processor.hxx b/odb/processor.hxx
index 602b999..e62dd25 100644
--- a/odb/processor.hxx
+++ b/odb/processor.hxx
@@ -9,22 +9,12 @@
#include <odb/features.hxx>
#include <odb/semantics/unit.hxx>
-class processor
-{
-public:
- class failed {};
+class processor_failed {};
- void
- process (options const&,
- features&,
- semantics::unit&,
- semantics::path const&);
-
- processor () {}
-
-private:
- processor (processor const&);
- processor& operator= (processor const&);
-};
+void
+process (options const&,
+ features&,
+ semantics::unit&,
+ semantics::path const&);
#endif // ODB_PROCESSOR_HXX
diff --git a/odb/relational/validator.cxx b/odb/relational/validator.cxx
index 1d51c9a..47f089c 100644
--- a/odb/relational/validator.cxx
+++ b/odb/relational/validator.cxx
@@ -528,7 +528,7 @@ namespace relational
};
}
- void validator::
+ void
validate (options const&,
features&,
semantics::unit& u,
@@ -608,7 +608,7 @@ namespace relational
}
if (!valid)
- throw failed ();
+ throw operation_failed ();
if (pass == 1)
{
@@ -636,6 +636,6 @@ namespace relational
}
if (!valid)
- throw failed ();
+ throw operation_failed ();
}
}
diff --git a/odb/relational/validator.hxx b/odb/relational/validator.hxx
index f0ede53..93360c3 100644
--- a/odb/relational/validator.hxx
+++ b/odb/relational/validator.hxx
@@ -11,26 +11,15 @@
namespace relational
{
- class validator
- {
- public:
- struct failed {};
-
- // The first pass is performed before processing. The second -- after.
- //
- void
- validate (options const&,
- features&,
- semantics::unit&,
- semantics::path const&,
- unsigned short pass);
-
- validator () {}
-
- private:
- validator (validator const&);
- validator& operator= (validator const&);
- };
+ // The first pass is performed before processing. The second -- after.
+ // Throws operation_failed to signal a failure.
+ //
+ void
+ validate (options const&,
+ features&,
+ semantics::unit&,
+ semantics::path const&,
+ unsigned short pass);
}
#endif // ODB_RELATIONAL_VALIDATOR_HXX
diff --git a/odb/validator.cxx b/odb/validator.cxx
index e80f4d8..91d91e5 100644
--- a/odb/validator.cxx
+++ b/odb/validator.cxx
@@ -1457,7 +1457,7 @@ namespace
};
}
-void validator::
+void
validate (options const& ops,
features& f,
semantics::unit& u,
@@ -1506,7 +1506,7 @@ validate (options const& ops,
}
if (!valid)
- throw failed ();
+ throw validator_failed ();
auto_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
@@ -1559,7 +1559,7 @@ validate (options const& ops,
}
if (!valid)
- throw failed ();
+ throw validator_failed ();
switch (db)
{
@@ -1575,12 +1575,11 @@ validate (options const& ops,
{
try
{
- relational::validator v;
- v.validate (ops, f, u, p, pass);
+ relational::validate (ops, f, u, p, pass);
}
- catch (relational::validator::failed const&)
+ catch (operation_failed const&)
{
- throw failed ();
+ throw validator_failed ();
}
break;
diff --git a/odb/validator.hxx b/odb/validator.hxx
index f913049..3ffa470 100644
--- a/odb/validator.hxx
+++ b/odb/validator.hxx
@@ -9,25 +9,15 @@
#include <odb/features.hxx>
#include <odb/semantics/unit.hxx>
-class validator
-{
-public:
- struct failed {};
+class validator_failed {};
- // The first pass is performed before processing. The second -- after.
- //
- void
- validate (options const&,
- features&,
- semantics::unit&,
- semantics::path const&,
- unsigned short pass);
-
- validator () {}
-
-private:
- validator (validator const&);
- validator& operator= (validator const&);
-};
+// The first pass is performed before processing. The second -- after.
+//
+void
+validate (options const&,
+ features&,
+ semantics::unit&,
+ semantics::path const&,
+ unsigned short pass);
#endif // ODB_VALIDATOR_HXX
--
2.25.0
@@ -0,0 +1,312 @@
From bf389fd5185143847b1d91aed423e79c322dba51 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Fri, 5 Feb 2016 16:01:42 +0200
Subject: [PATCH] Initial work to make ODB compatible with GCC 6
[Upstream: 511dcf67322ad87fb32f97d1cf7725c129e83898]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/cxx-lexer.cxx | 4 ++++
odb/gcc-fwd.hxx | 23 ++++++++++++++++++++++-
odb/gcc.hxx | 10 ++++++++++
odb/include.cxx | 31 +++++++++++++++++++++----------
odb/parser.cxx | 8 ++++----
odb/plugin.cxx | 29 +++++++++++++++++++++++++++--
odb/semantics/elements.cxx | 4 ++--
7 files changed, 90 insertions(+), 19 deletions(-)
diff --git a/odb/cxx-lexer.cxx b/odb/cxx-lexer.cxx
index 7029c7e..64df296 100644
--- a/odb/cxx-lexer.cxx
+++ b/odb/cxx-lexer.cxx
@@ -135,8 +135,12 @@ cpp_error_callback (
#if BUILDING_GCC_MAJOR > 4 || BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR > 5
int /*reason*/, // Added in GCC 4.6.0.
#endif
+#if BUILDING_GCC_MAJOR <= 5
location_t,
unsigned int,
+#else
+ rich_location*,
+#endif
char const* msg,
va_list *ap)
{
diff --git a/odb/gcc-fwd.hxx b/odb/gcc-fwd.hxx
index a120f05..618b106 100644
--- a/odb/gcc-fwd.hxx
+++ b/odb/gcc-fwd.hxx
@@ -7,6 +7,24 @@
#include <bversion.h>
+#if BUILDING_GCC_MAJOR >= 6
+
+// If we include <system.h> here, it pulls in all kinds of GCC trouble that
+// "poisons" standard C/C++ declarations; see safe-ctype.h. So instead we
+// are going to "exclude" safe-ctype.h. To compensate, however, we will
+// include it first thing in gcc.hxx.
+//
+# include <config.h>
+# define SAFE_CTYPE_H
+# include <system.h>
+# undef SAFE_CTYPE_H
+# include <coretypes.h>
+
+typedef unsigned int source_location; // <line-map.h>
+typedef source_location location_t; // <input.h>
+
+#else // GCC < 6
+
#if BUILDING_GCC_MAJOR > 4 || BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR > 8
# include <limits.h> // CHAR_BIT
# include <config.h>
@@ -33,6 +51,9 @@ extern "C"
typedef unsigned int source_location; // <line-map.h>
typedef source_location location_t; // <input.h>
-}
+
+} // extern "C"
+
+#endif
#endif // ODB_GCC_FWD_HXX
diff --git a/odb/gcc.hxx b/odb/gcc.hxx
index c953047..858d685 100644
--- a/odb/gcc.hxx
+++ b/odb/gcc.hxx
@@ -7,6 +7,10 @@
#include <odb/gcc-fwd.hxx>
+#if BUILDING_GCC_MAJOR >= 6
+# include <safe-ctype.h> // See gcc-fwd.hxx.
+#endif
+
// GCC header includes to get the plugin and parse tree declarations.
// The order is important and doesn't follow any kind of logic.
//
@@ -145,4 +149,10 @@ gcc_tree_code_name (gcc_tree_code_type tc) {return tree_code_name[tc];}
#define DECL_CHAIN(x) TREE_CHAIN(x)
#endif
+// In GCC 6, ANON_AGGRNAME_P became anon_aggrname_p().
+//
+#if BUILDING_GCC_MAJOR < 6
+# define anon_aggrname_p(X) ANON_AGGRNAME_P(X)
+#endif
+
#endif // ODB_GCC_HXX
diff --git a/odb/include.cxx b/odb/include.cxx
index c397993..08c93ce 100644
--- a/odb/include.cxx
+++ b/odb/include.cxx
@@ -30,9 +30,18 @@ namespace
path path_;
};
+#if BUILDING_GCC_MAJOR >= 6
+ typedef line_map_ordinary line_map_type;
+#else
+ typedef line_map line_map_type;
+# ifndef linemap_check_ordinary
+# define linemap_check_ordinary(X) (X)
+# endif
+#endif
+
struct includes
{
- typedef std::map<line_map const*, include_directive> map_type;
+ typedef std::map<line_map_type const*, include_directive> map_type;
bool trailing; // Included at the beginning or at the end of the main file.
map_type map;
};
@@ -144,7 +153,9 @@ namespace
//
if (l > BUILTINS_LOCATION)
{
- line_map const* lm (linemap_lookup (line_table, l));
+ line_map_type const* lm (
+ linemap_check_ordinary (
+ linemap_lookup (line_table, l)));
if (lm != 0 && !MAIN_FILE_P (lm))
{
@@ -537,20 +548,20 @@ namespace
//
#if BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR <= 6
size_t used (line_table->used);
- line_map const* maps (line_table->maps);
+ line_map_type const* maps (line_table->maps);
#else
size_t used (line_table->info_ordinary.used);
- line_map const* maps (line_table->info_ordinary.maps);
+ line_map_type const* maps (line_table->info_ordinary.maps);
#endif
for (size_t i (0); i < used; ++i)
{
- line_map const* m (maps + i);
+ line_map_type const* m (maps + i);
if (MAIN_FILE_P (m) || m->reason != LC_ENTER)
continue;
- line_map const* ifm (INCLUDED_FROM (line_table, m));
+ line_map_type const* ifm (INCLUDED_FROM (line_table, m));
#if BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR <= 6
path f (m->to_file);
@@ -580,7 +591,7 @@ namespace
for (includes::iterator j (i->second.begin ());
j != i->second.end (); ++j)
{
- line_map const* lm (j->first);
+ line_map_type const* lm (j->first);
cerr << '\t' << lm->to_file << ":" << LAST_SOURCE_LINE (lm) << endl;
}
*/
@@ -589,13 +600,13 @@ namespace
// it is preferred over all others. Use the first one if there are
// several.
//
- line_map const* main_lm (0);
+ line_map_type const* main_lm (0);
include_directive* main_inc (0);
for (includes::map_type::iterator j (i->second.map.begin ());
j != i->second.map.end (); ++j)
{
- line_map const* lm (j->first);
+ line_map_type const* lm (j->first);
if (MAIN_FILE_P (lm))
{
@@ -636,7 +647,7 @@ namespace
for (includes::map_type::iterator j (i->second.map.begin ());
j != i->second.map.end (); ++j)
{
- line_map const* lm (j->first);
+ line_map_type const* lm (j->first);
#if BUILDING_GCC_MAJOR == 4 && BUILDING_GCC_MINOR <= 6
string f (lm->to_file);
diff --git a/odb/parser.cxx b/odb/parser.cxx
index a8e6a6a..feda9d4 100644
--- a/odb/parser.cxx
+++ b/odb/parser.cxx
@@ -1044,14 +1044,14 @@ emit_type_decl (tree decl)
// says that in typedef struct {} S; S becomes struct's
// name.
//
- if (ANON_AGGRNAME_P (decl_name))
+ if (anon_aggrname_p (decl_name))
{
tree d (TYPE_NAME (t));
if (d != NULL_TREE &&
!DECL_ARTIFICIAL (d) &&
DECL_NAME (d) != NULL_TREE &&
- !ANON_AGGRNAME_P (DECL_NAME (d)))
+ !anon_aggrname_p (DECL_NAME (d)))
{
decl = d;
decl_name = DECL_NAME (decl);
@@ -1668,7 +1668,7 @@ create_type (tree t,
ts << "start anon/stub " << gcc_tree_code_name(tc) << " at "
<< file << ":" << line << endl;
- if (d == NULL_TREE || ANON_AGGRNAME_P (DECL_NAME (d)))
+ if (d == NULL_TREE || anon_aggrname_p (DECL_NAME (d)))
{
if (tc == RECORD_TYPE)
r = &emit_class<class_> (t, file, line, clmn);
@@ -1765,7 +1765,7 @@ create_type (tree t,
ts << "start anon/stub " << gcc_tree_code_name(tc) << " at "
<< file << ":" << line << endl;
- if (d == NULL_TREE || ANON_AGGRNAME_P (DECL_NAME (d)))
+ if (d == NULL_TREE || anon_aggrname_p (DECL_NAME (d)))
{
r = &emit_enum (t, access, file, line, clmn);
}
diff --git a/odb/plugin.cxx b/odb/plugin.cxx
index 51f0cb1..779faed 100644
--- a/odb/plugin.cxx
+++ b/odb/plugin.cxx
@@ -45,14 +45,28 @@ path file_; // File being compiled.
paths inputs_; // List of input files in at-once mode or just file_.
bool (*cpp_error_prev) (
- cpp_reader*, int, int, location_t, unsigned int, const char*, va_list*);
+ cpp_reader*,
+ int,
+ int,
+#if BUILDING_GCC_MAJOR >= 6
+ rich_location*,
+#else
+ location_t,
+ unsigned int,
+#endif
+ const char*,
+ va_list*);
static bool
cpp_error_filter (cpp_reader* r,
int level,
int reason,
+#if BUILDING_GCC_MAJOR >= 6
+ rich_location* l,
+#else
location_t l,
unsigned int column_override,
+#endif
const char* msg,
va_list* ap)
{
@@ -66,7 +80,18 @@ cpp_error_filter (cpp_reader* r,
if (strstr (msg, "#pragma once") != 0)
return true;
- return cpp_error_prev (r, level, reason, l, column_override, msg, ap);
+ return cpp_error_prev (
+ r,
+ level,
+ reason,
+#if BUILDING_GCC_MAJOR >= 6
+ l,
+#else
+ l,
+ column_override,
+#endif
+ msg,
+ ap);
}
// A prefix of the _cpp_file struct. This struct is not part of the
diff --git a/odb/semantics/elements.cxx b/odb/semantics/elements.cxx
index 21e3260..399d5e9 100644
--- a/odb/semantics/elements.cxx
+++ b/odb/semantics/elements.cxx
@@ -59,7 +59,7 @@ namespace semantics
if (tree decl = TYPE_NAME (n))
name = DECL_NAME (decl);
- return name != 0 && ANON_AGGRNAME_P (name);
+ return name != 0 && anon_aggrname_p (name);
}
return true;
@@ -108,7 +108,7 @@ namespace semantics
if (tree decl = TYPE_NAME (type))
{
name = DECL_NAME (decl);
- if (name != 0 && ANON_AGGRNAME_P (name))
+ if (name != 0 && anon_aggrname_p (name))
return true;
tree s (CP_DECL_CONTEXT (decl));
--
2.25.0
@@ -0,0 +1,48 @@
From 4584b69c45b701c3689d6a974f1ee560a79a243e Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Mon, 8 Feb 2016 18:39:21 +0200
Subject: [PATCH] Make compilable with GCC 6 in C++14 mode
[Upstream: 61d13eb53ade9f30a64892a901401bda5e42c335]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/gcc.hxx | 9 ++++++---
odb/parser.cxx | 2 ++
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/odb/gcc.hxx b/odb/gcc.hxx
index 858d685..a22357d 100644
--- a/odb/gcc.hxx
+++ b/odb/gcc.hxx
@@ -7,9 +7,12 @@
#include <odb/gcc-fwd.hxx>
-#if BUILDING_GCC_MAJOR >= 6
-# include <safe-ctype.h> // See gcc-fwd.hxx.
-#endif
+// Actually, let's keep it out. With it included we can compile in C++98
+// but not in C++14 (GCC 6 default).
+//
+// #if BUILDING_GCC_MAJOR >= 6
+// # include <safe-ctype.h> // See gcc-fwd.hxx.
+// #endif
// GCC header includes to get the plugin and parse tree declarations.
// The order is important and doesn't follow any kind of logic.
diff --git a/odb/parser.cxx b/odb/parser.cxx
index feda9d4..a9d22fb 100644
--- a/odb/parser.cxx
+++ b/odb/parser.cxx
@@ -1831,6 +1831,8 @@ create_type (tree t,
// the array type. In other words, we view it as "constant array"
// rather than "array of constant elements".
//
+ using semantics::array; // vs std::array.
+
tree bt (TREE_TYPE (t));
tree bt_mv (TYPE_MAIN_VARIANT (bt));
type& bt_node (emit_type (bt_mv, access::public_, file, line, clmn));
--
2.25.0
@@ -0,0 +1,34 @@
From 029687831099bf1dcc944517f9e48af1db5b0361 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Fri, 23 Dec 2016 10:18:01 +0200
Subject: [PATCH] Fix bug in GCC 6 input_location translation
[Upstream: ec777147024fde72e4411cc6b1e1e49f4a1d1804]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/cxx-lexer.cxx | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/odb/cxx-lexer.cxx b/odb/cxx-lexer.cxx
index 64df296..ae045d9 100644
--- a/odb/cxx-lexer.cxx
+++ b/odb/cxx-lexer.cxx
@@ -106,7 +106,15 @@ next (string& token, tree* node)
location_t cxx_pragma_lexer::
location () const
{
+ // Starting from GCC 6 the input location seem to require the same
+ // translation as what we do in real_source_location().
+ //
+#if BUILDING_GCC_MAJOR >= 6
+ return linemap_resolve_location (
+ line_table, input_location, LRK_MACRO_EXPANSION_POINT, 0);
+#else
return input_location;
+#endif
}
string cxx_pragma_lexer::
--
2.25.0
@@ -0,0 +1,228 @@
From aca617685045b1984c19c415a474893407578394 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Tue, 7 Nov 2017 14:58:43 +0200
Subject: [PATCH] Adapt to changes in GCC 8
[Upstream: 356630ced28f3101e8e2d88e3c52f8d3008515c7]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/cxx-lexer.cxx | 16 ++++++++++++++--
odb/parser.cxx | 27 ++++++++++++++++++++++++++-
odb/processor.cxx | 30 ++++++++++++++++++++++--------
odb/semantics/elements.cxx | 8 ++++++++
odb/validator.cxx | 10 +++++++++-
5 files changed, 79 insertions(+), 12 deletions(-)
diff --git a/odb/cxx-lexer.cxx b/odb/cxx-lexer.cxx
index ae045d9..cfebbb5 100644
--- a/odb/cxx-lexer.cxx
+++ b/odb/cxx-lexer.cxx
@@ -93,7 +93,13 @@ next (string& token, tree* node)
// See if this is a keyword using the C++ parser machinery and
// the current C++ dialect.
//
- if (*type_ == CPP_NAME && C_IS_RESERVED_WORD (*token_))
+ if (*type_ == CPP_NAME &&
+#if BUILDING_GCC_MAJOR >= 8
+ IDENTIFIER_KEYWORD_P (*token_)
+#else
+ C_IS_RESERVED_WORD (*token_)
+#endif
+ )
*type_ = CPP_KEYWORD;
if (node != 0 && node != token_)
@@ -281,7 +287,13 @@ next (string& token, tree* node)
//
tree id (get_identifier (name));
- if (C_IS_RESERVED_WORD (id))
+ if (
+#if BUILDING_GCC_MAJOR >= 8
+ IDENTIFIER_KEYWORD_P (id)
+#else
+ C_IS_RESERVED_WORD (id)
+#endif
+ )
tt = CPP_KEYWORD;
if (node != 0)
diff --git a/odb/parser.cxx b/odb/parser.cxx
index a9d22fb..927063b 100644
--- a/odb/parser.cxx
+++ b/odb/parser.cxx
@@ -889,8 +889,23 @@ collect (tree ns)
// Traverse namespaces.
//
- for (decl = level->namespaces; decl != NULL_TREE; decl = TREE_CHAIN (decl))
+ for (
+#if BUILDING_GCC_MAJOR >= 8
+ decl = level->names;
+#else
+ decl = level->namespaces;
+#endif
+ decl != NULL_TREE;
+ decl = TREE_CHAIN (decl))
{
+#if BUILDING_GCC_MAJOR >= 8
+ // Now namespaces are interleaved with other declarations. In fact, we
+ // could probably collect everything in a single pass.
+ //
+ if (TREE_CODE (decl) != NAMESPACE_DECL)
+ continue;
+#endif
+
if (!DECL_IS_BUILTIN (decl) || DECL_NAMESPACE_STD_P (decl))
{
if (trace)
@@ -960,9 +975,15 @@ emit ()
// approximation for this namespace origin. Also resolve
// the tree node for this namespace.
//
+#if BUILDING_GCC_MAJOR >= 8
+ tree tree_node (
+ get_namespace_binding (
+ scope_->tree_node (), get_identifier (n.c_str ())));
+#else
tree tree_node (
namespace_binding (
get_identifier (n.c_str ()), scope_->tree_node ()));
+#endif
namespace_& node (unit_->new_node<namespace_> (f, l, c, tree_node));
unit_->new_edge<defines> (*scope_, node, n);
@@ -2218,7 +2239,11 @@ fq_scope (tree decl)
// If this is an inline namespace, pretend it doesn't exist.
//
+#if BUILDING_GCC_MAJOR >= 8
+ if (!is_nested_namespace (prev, scope, true))
+#else
if (!is_associated_namespace (prev, scope))
+#endif
{
tree n = DECL_NAME (scope);
diff --git a/odb/processor.cxx b/odb/processor.cxx
index 3a2cb1d..bea3624 100644
--- a/odb/processor.cxx
+++ b/odb/processor.cxx
@@ -423,12 +423,17 @@ namespace
// OVL_* macros work for both FUNCTION_DECL and OVERLOAD.
//
- for (tree o (BASELINK_FUNCTIONS (decl));
- o != 0;
- o = OVL_NEXT (o))
+#if BUILDING_GCC_MAJOR >= 8
+ for (ovl_iterator i (BASELINK_FUNCTIONS (decl)); i; ++i)
+#else
+ for (tree o (BASELINK_FUNCTIONS (decl)); o != 0; o = OVL_NEXT (o))
+#endif
{
+#if BUILDING_GCC_MAJOR >= 8
+ tree f (*i);
+#else
tree f (OVL_CURRENT (o));
-
+#endif
// We are only interested in public non-static member
// functions. Note that TREE_PUBLIC() returns something
// other than what we need.
@@ -530,12 +535,17 @@ namespace
{
// OVL_* macros work for both FUNCTION_DECL and OVERLOAD.
//
- for (tree o (BASELINK_FUNCTIONS (decl));
- o != 0;
- o = OVL_NEXT (o))
+#if BUILDING_GCC_MAJOR >= 8
+ for (ovl_iterator i (BASELINK_FUNCTIONS (decl)); i; ++i)
+#else
+ for (tree o (BASELINK_FUNCTIONS (decl)); o != 0; o = OVL_NEXT (o))
+#endif
{
+#if BUILDING_GCC_MAJOR >= 8
+ tree f (*i);
+#else
tree f (OVL_CURRENT (o));
-
+#endif
// We are only interested in non-static member functions.
//
if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (f))
@@ -2934,7 +2944,11 @@ namespace
{
tree prev (CP_DECL_CONTEXT (scope));
+#if BUILDING_GCC_MAJOR >= 8
+ if (!is_nested_namespace (prev, scope, true))
+#else
if (!is_associated_namespace (prev, scope))
+#endif
break;
scope = prev;
diff --git a/odb/semantics/elements.cxx b/odb/semantics/elements.cxx
index 399d5e9..4c380d8 100644
--- a/odb/semantics/elements.cxx
+++ b/odb/semantics/elements.cxx
@@ -126,7 +126,11 @@ namespace semantics
{
tree prev (CP_DECL_CONTEXT (s));
+#if BUILDING_GCC_MAJOR >= 8
+ if (!is_nested_namespace (prev, s, true))
+#else
if (!is_associated_namespace (prev, s))
+#endif
break;
s = prev;
@@ -223,7 +227,11 @@ namespace semantics
{
// Check if this is an inline namespace and skip it if so.
//
+#if BUILDING_GCC_MAJOR >= 8
+ if (is_nested_namespace (ns, new_ns, true))
+#else
if (is_associated_namespace (ns, new_ns))
+#endif
{
// Skip also the following scope operator. Strictly speaking
// there could be none (i.e., this is a name of an inline
diff --git a/odb/validator.cxx b/odb/validator.cxx
index 91d91e5..aac52e4 100644
--- a/odb/validator.cxx
+++ b/odb/validator.cxx
@@ -520,9 +520,17 @@ namespace
// Figure out if we have a const version of the callback. OVL_*
// macros work for both FUNCTION_DECL and OVERLOAD.
//
+#if BUILDING_GCC_MAJOR >= 8
+ for (ovl_iterator i (BASELINK_FUNCTIONS (decl)); i; ++i)
+#else
for (tree o (BASELINK_FUNCTIONS (decl)); o != 0; o = OVL_NEXT (o))
+#endif
{
+#if BUILDING_GCC_MAJOR >= 8
+ tree f (*i);
+#else
tree f (OVL_CURRENT (o));
+#endif
if (DECL_CONST_MEMFUNC_P (f))
{
c.set ("callback-const", true);
@@ -1223,7 +1231,7 @@ namespace
compiler, get_identifier ("has_lt_operator"), false, false);
if (has_lt_operator_ != error_mark_node)
- has_lt_operator_ = OVL_CURRENT (has_lt_operator_);
+ has_lt_operator_ = OVL_FIRST (has_lt_operator_);
else
{
os << unit.file () << ": error: unable to resolve has_lt_operator "
--
2.25.0
@@ -0,0 +1,351 @@
From c5bea9562929c6b55ca208a530ae80033eeb1614 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Tue, 7 Nov 2017 10:37:53 +0200
Subject: [PATCH] Switch to C++11, get rid of auto_ptr use
[Upstream: 6e374de9ae2f2978f2fca3390aba4ea3f72bfade]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/Makefile.am | 5 +++++
odb/context.cxx | 4 ++--
odb/context.hxx | 4 ++--
odb/generator.cxx | 18 +++++++++---------
odb/options.cli | 4 ++--
odb/parser.cxx | 14 ++++++++++----
odb/parser.hxx | 7 ++++---
odb/plugin.cxx | 10 +++++-----
odb/processor.cxx | 6 +++---
odb/validator.cxx | 2 +-
10 files changed, 43 insertions(+), 31 deletions(-)
diff --git a/odb/Makefile.am b/odb/Makefile.am
index 2f01398..d9e83d7 100644
--- a/odb/Makefile.am
+++ b/odb/Makefile.am
@@ -9,6 +9,11 @@ plugin_LTLIBRARIES = odb.la
AM_CPPFLAGS = -I'$(top_builddir)' -I'$(top_srcdir)'
+# Note: not passed by libtool when linking odb.so. Seems to be harmless for
+# now.
+#
+AM_CXXFLAGS = -std=c++0x
+
EXTRA_DIST = common-query.hxx common.hxx context.hxx context.ixx cxx-lexer.hxx cxx-token.hxx diagnostics.hxx emitter.hxx features.hxx gcc-fwd.hxx gcc.hxx generate.hxx generator.hxx instance.hxx location.hxx lookup.hxx option-functions.hxx option-parsers.hxx option-types.hxx options.hxx options.ixx parser.hxx pragma.hxx processor.hxx profile.hxx relational/common-query.hxx relational/common.hxx relational/common.txx relational/context.hxx relational/context.ixx relational/generate.hxx relational/header.hxx relational/inline.hxx relational/model.hxx relational/mssql/common.hxx relational/mssql/context.hxx relational/mysql/common.hxx relational/mysql/context.hxx relational/oracle/common.hxx relational/oracle/context.hxx relational/pgsql/common.hxx relational/pgsql/context.hxx relational/processor.hxx relational/schema-source.hxx relational/schema.hxx relational/source.hxx relational/sqlite/common.hxx relational/sqlite/context.hxx relational/validator.hxx semantics.hxx semantics/class-template.hxx semantics/class.hxx semantics/derived.hxx semantics/elements.hxx semantics/elements.ixx semantics/enum.hxx semantics/fundamental.hxx semantics/namespace.hxx semantics/relational.hxx semantics/relational/changelog.hxx semantics/relational/changeset.hxx semantics/relational/column.hxx semantics/relational/deferrable.hxx semantics/relational/elements.hxx semantics/relational/elements.txx semantics/relational/foreign-key.hxx semantics/relational/index.hxx semantics/relational/key.hxx semantics/relational/model.hxx semantics/relational/name.hxx semantics/relational/primary-key.hxx semantics/relational/table.hxx semantics/template.hxx semantics/union-template.hxx semantics/union.hxx semantics/unit.hxx sql-lexer.hxx sql-lexer.ixx sql-token.hxx sql-token.ixx traversal.hxx traversal/class-template.hxx traversal/class.hxx traversal/derived.hxx traversal/elements.hxx traversal/enum.hxx traversal/fundamental.hxx traversal/namespace.hxx traversal/relational.hxx traversal/relational/changelog.hxx traversal/relational/changeset.hxx traversal/relational/column.hxx traversal/relational/elements.hxx traversal/relational/foreign-key.hxx traversal/relational/index.hxx traversal/relational/key.hxx traversal/relational/model.hxx traversal/relational/primary-key.hxx traversal/relational/table.hxx traversal/template.hxx traversal/union-template.hxx traversal/union.hxx traversal/unit.hxx validator.hxx version.hxx options.cli
# Plugin.
diff --git a/odb/context.cxx b/odb/context.cxx
index d62fa88..87f1c32 100644
--- a/odb/context.cxx
+++ b/odb/context.cxx
@@ -564,14 +564,14 @@ namespace
};
}
-auto_ptr<context>
+unique_ptr<context>
create_context (ostream& os,
semantics::unit& unit,
options const& ops,
features& f,
semantics::relational::model* m)
{
- auto_ptr<context> r;
+ unique_ptr<context> r;
switch (ops.database ()[0])
{
diff --git a/odb/context.hxx b/odb/context.hxx
index 351bc61..10de237 100644
--- a/odb/context.hxx
+++ b/odb/context.hxx
@@ -13,7 +13,7 @@
#include <stack>
#include <vector>
#include <string>
-#include <memory> // std::auto_ptr
+#include <memory> // std::unique_ptr
#include <ostream>
#include <cstddef> // std::size_t
#include <iostream>
@@ -1691,7 +1691,7 @@ private:
// Create concrete database context.
//
-std::auto_ptr<context>
+std::unique_ptr<context>
create_context (std::ostream&,
semantics::unit&,
options const&,
diff --git a/odb/generator.cxx b/odb/generator.cxx
index 6aa5151..266b75f 100644
--- a/odb/generator.cxx
+++ b/odb/generator.cxx
@@ -4,7 +4,7 @@
#include <cctype> // std::toupper, std::is{alpha,upper,lower}
#include <string>
-#include <memory> // std::auto_ptr
+#include <memory> // std::unique_ptr
#include <iomanip>
#include <fstream>
#include <sstream>
@@ -141,7 +141,7 @@ generate (options const& ops,
if (gen_schema)
{
- auto_ptr<context> ctx (create_context (cerr, unit, ops, fts, 0));
+ unique_ptr<context> ctx (create_context (cerr, unit, ops, fts, 0));
switch (db)
{
@@ -471,7 +471,7 @@ generate (options const& ops,
//
if (gen_cxx)
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (hxx, unit, ops, fts, model.get ()));
sloc_filter sloc (ctx->os);
@@ -581,7 +581,7 @@ generate (options const& ops,
//
if (gen_cxx)
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (ixx, unit, ops, fts, model.get ()));
sloc_filter sloc (ctx->os);
@@ -641,7 +641,7 @@ generate (options const& ops,
//
if (gen_cxx && (db != database::common || md == multi_database::dynamic))
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (cxx, unit, ops, fts, model.get ()));
sloc_filter sloc (ctx->os);
@@ -734,7 +734,7 @@ generate (options const& ops,
//
if (gen_sep_schema)
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (sch, unit, ops, fts, model.get ()));
sloc_filter sloc (ctx->os);
@@ -799,7 +799,7 @@ generate (options const& ops,
//
if (gen_sql_schema)
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (sql, unit, ops, fts, model.get ()));
switch (db)
@@ -865,7 +865,7 @@ generate (options const& ops,
//
{
ofstream& mig (*mig_pre[i]);
- auto_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
+ unique_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
switch (db)
{
@@ -908,7 +908,7 @@ generate (options const& ops,
//
{
ofstream& mig (*mig_post[i]);
- auto_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
+ unique_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
switch (db)
{
diff --git a/odb/options.cli b/odb/options.cli
index cf278cb..c994975 100644
--- a/odb/options.cli
+++ b/odb/options.cli
@@ -211,10 +211,10 @@ class options
\cb{db pointer} pragma will use this pointer by default. The value
of this option can be \cb{*} which denotes the raw pointer and is
the default, or qualified name of a smart pointer class template,
- for example, \cb{std::auto_ptr}. In the latter case, the ODB compiler
+ for example, \cb{std::shared_ptr}. In the latter case, the ODB compiler
constructs the object or view pointer by adding a single template
argument of the object or view type to the qualified name, for example
- \cb{std::auto_ptr<object>}. The ODB runtime uses object and view
+ \cb{std::shared_ptr<object>}. The ODB runtime uses object and view
pointers to return, and, in case of objects, pass and cache
dynamically allocated instances of object and view types.
diff --git a/odb/parser.cxx b/odb/parser.cxx
index 927063b..30e45af 100644
--- a/odb/parser.cxx
+++ b/odb/parser.cxx
@@ -26,7 +26,7 @@ public:
impl (options const&, loc_pragmas&, ns_loc_pragmas&, decl_pragmas&);
- auto_ptr<unit>
+ unique_ptr<unit>
parse (tree global_scope, path const& main_file);
private:
@@ -728,10 +728,10 @@ impl (options const& ops,
{
}
-auto_ptr<unit> parser::impl::
+unique_ptr<unit> parser::impl::
parse (tree global_scope, path const& main_file)
{
- auto_ptr<unit> u (new unit (main_file));
+ unique_ptr<unit> u (new unit (main_file));
u->insert (global_namespace, *u);
process_named_pragmas (global_namespace, *u);
@@ -2263,6 +2263,12 @@ fq_scope (tree decl)
// parser
//
+parser::
+~parser ()
+{
+ // Needs parser::impl definition.
+}
+
parser::
parser (options const& ops,
loc_pragmas& lp,
@@ -2272,7 +2278,7 @@ parser (options const& ops,
{
}
-auto_ptr<unit> parser::
+unique_ptr<unit> parser::
parse (tree global_scope, path const& main_file)
{
return impl_->parse (global_scope, main_file);
diff --git a/odb/parser.hxx b/odb/parser.hxx
index 80e4aa4..648337f 100644
--- a/odb/parser.hxx
+++ b/odb/parser.hxx
@@ -7,7 +7,7 @@
#include <odb/gcc.hxx>
-#include <memory> // std::auto_ptr
+#include <memory> // std::unique_ptr
#include <odb/pragma.hxx>
#include <odb/options.hxx>
@@ -18,9 +18,10 @@ class parser
public:
class failed {};
+ ~parser ();
parser (options const&, loc_pragmas&, ns_loc_pragmas&, decl_pragmas&);
- std::auto_ptr<semantics::unit>
+ std::unique_ptr<semantics::unit>
parse (tree global_scope, semantics::path const& main_file);
private:
@@ -31,7 +32,7 @@ private:
private:
class impl;
- std::auto_ptr<impl> impl_;
+ std::unique_ptr<impl> impl_;
};
#endif // ODB_PARSER_HXX
diff --git a/odb/plugin.cxx b/odb/plugin.cxx
index 779faed..0fac632 100644
--- a/odb/plugin.cxx
+++ b/odb/plugin.cxx
@@ -8,7 +8,7 @@
#include <sys/types.h> // stat
#include <sys/stat.h> // stat
-#include <memory> // std::auto_ptr
+#include <memory> // std::unique_ptr
#include <string>
#include <vector>
#include <cstring> // std::strcpy, std::strstr
@@ -39,7 +39,7 @@ using cutl::fs::invalid_path;
typedef vector<path> paths;
int plugin_is_GPL_compatible;
-auto_ptr<options const> options_;
+unique_ptr<options const> options_;
paths profile_paths_;
path file_; // File being compiled.
paths inputs_; // List of input files in at-once mode or just file_.
@@ -222,7 +222,7 @@ gate_callback (void*, void*)
// Parse the GCC tree to semantic graph.
//
parser p (*options_, loc_pragmas_, ns_loc_pragmas_, decl_pragmas_);
- auto_ptr<unit> u (p.parse (global_namespace, file_));
+ unique_ptr<unit> u (p.parse (global_namespace, file_));
features f;
@@ -377,14 +377,14 @@ plugin_init (plugin_name_args* plugin_info, plugin_gcc_version*)
oi[2].arg = &pd;
cli::argv_file_scanner scan (argc, &argv[0], oi, 3);
- auto_ptr<options> ops (
+ unique_ptr<options> ops (
new options (scan, cli::unknown_mode::fail, cli::unknown_mode::fail));
// Process options.
//
process_options (*ops);
- options_ = ops;
+ options_ = move (ops);
pragma_db_ = db;
pragma_multi_ = options_->multi_database ();
}
diff --git a/odb/processor.cxx b/odb/processor.cxx
index bea3624..c787e0d 100644
--- a/odb/processor.cxx
+++ b/odb/processor.cxx
@@ -120,8 +120,8 @@ namespace
// both the wrapper type and the wrapped type must be const.
// To see why, consider these possibilities:
//
- // auto_ptr<const T> - can modify by setting a new pointer
- // const auto_ptr<T> - can modify by changing the pointed-to value
+ // unique_ptr<const T> - can modify by setting a new pointer
+ // const unique_ptr<T> - can modify by changing the pointed-to value
//
if (const_type (m.type ()) &&
!(id (m) || version (m) || m.count ("inverse")))
@@ -3086,7 +3086,7 @@ process (options const& ops,
{
try
{
- auto_ptr<context> ctx (create_context (cerr, unit, ops, f, 0));
+ unique_ptr<context> ctx (create_context (cerr, unit, ops, f, 0));
// Common processing.
//
diff --git a/odb/validator.cxx b/odb/validator.cxx
index aac52e4..196386c 100644
--- a/odb/validator.cxx
+++ b/odb/validator.cxx
@@ -1516,7 +1516,7 @@ validate (options const& ops,
if (!valid)
throw validator_failed ();
- auto_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
+ unique_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
if (pass == 1)
{
--
2.25.0
@@ -0,0 +1,33 @@
From 8cc165a2f7f945db36a18e462138553a000292cd Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Tue, 7 Nov 2017 16:57:35 +0200
Subject: [PATCH] Fix GCC 8 adaptation to be compatible with previous
versions
[Upstream: 006bbc5748a8197d7874550cc9186545f1c55ad8]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/validator.cxx | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/odb/validator.cxx b/odb/validator.cxx
index 196386c..f0edaaf 100644
--- a/odb/validator.cxx
+++ b/odb/validator.cxx
@@ -1231,7 +1231,13 @@ namespace
compiler, get_identifier ("has_lt_operator"), false, false);
if (has_lt_operator_ != error_mark_node)
+ {
+#if BUILDING_GCC_MAJOR >= 8
has_lt_operator_ = OVL_FIRST (has_lt_operator_);
+#else
+ has_lt_operator_ = OVL_CURRENT (has_lt_operator_);
+#endif
+ }
else
{
os << unit.file () << ": error: unable to resolve has_lt_operator "
--
2.25.0
@@ -0,0 +1,30 @@
From 2d37e44753c1e67de4658b6fdf95760432c74ead Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Fri, 5 Oct 2018 07:20:18 +0200
Subject: [PATCH] Handle namespace aliases when parsing GCC tree
[Upstream: 3a1788234bfaa96ee093b68e9ba02cf7d5bdffe6]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/parser.cxx | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/odb/parser.cxx b/odb/parser.cxx
index 30e45af..03bcb01 100644
--- a/odb/parser.cxx
+++ b/odb/parser.cxx
@@ -906,6 +906,11 @@ collect (tree ns)
continue;
#endif
+ // Ignore namespace aliases.
+ //
+ if (DECL_NAMESPACE_ALIAS (decl))
+ continue;
+
if (!DECL_IS_BUILTIN (decl) || DECL_NAMESPACE_STD_P (decl))
{
if (trace)
--
2.25.0
@@ -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
@@ -0,0 +1,97 @@
From 060bb7eb4d008fbd4a9fa8ef7c5e33c9e483eb52 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Wed, 17 Jun 2020 11:22:11 +0200
Subject: [PATCH] Adjust to changes in GCC 10
[Upstream: 060bb7eb4d008fbd4a9fa8ef7c5e33c9e483eb52]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
odb/gcc.hxx | 7 +++++--
odb/parser.cxx | 8 ++++----
odb/semantics/elements.cxx | 4 ++--
3 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/odb/gcc.hxx b/odb/gcc.hxx
index 9b644d7..af0e2a0 100644
--- a/odb/gcc.hxx
+++ b/odb/gcc.hxx
@@ -151,10 +151,13 @@ gcc_tree_code_name (gcc_tree_code_type tc) {return tree_code_name[tc];}
#define DECL_CHAIN(x) TREE_CHAIN(x)
#endif
-// In GCC 6, ANON_AGGRNAME_P became anon_aggrname_p().
+// In GCC 6 ANON_AGGRNAME_P became anon_aggrname_p().
+// In GCC 10 anon_aggrname_p() became IDENTIFIER_ANON_P.
//
#if BUILDING_GCC_MAJOR < 6
-# define anon_aggrname_p(X) ANON_AGGRNAME_P(X)
+# define IDENTIFIER_ANON_P(X) ANON_AGGRNAME_P(X)
+#elif BUILDING_GCC_MAJOR < 10
+# define IDENTIFIER_ANON_P(X) anon_aggrname_p(X)
#endif
// In GCC 9:
diff --git a/odb/parser.cxx b/odb/parser.cxx
index 69d9b28..58388c9 100644
--- a/odb/parser.cxx
+++ b/odb/parser.cxx
@@ -1103,14 +1103,14 @@ emit_type_decl (tree decl)
// says that in typedef struct {} S; S becomes struct's
// name.
//
- if (anon_aggrname_p (decl_name))
+ if (IDENTIFIER_ANON_P (decl_name))
{
tree d (TYPE_NAME (t));
if (d != NULL_TREE &&
!DECL_ARTIFICIAL (d) &&
DECL_NAME (d) != NULL_TREE &&
- !anon_aggrname_p (DECL_NAME (d)))
+ !IDENTIFIER_ANON_P (DECL_NAME (d)))
{
decl = d;
decl_name = DECL_NAME (decl);
@@ -1727,7 +1727,7 @@ create_type (tree t,
ts << "start anon/stub " << gcc_tree_code_name(tc) << " at "
<< file << ":" << line << endl;
- if (d == NULL_TREE || anon_aggrname_p (DECL_NAME (d)))
+ if (d == NULL_TREE || IDENTIFIER_ANON_P (DECL_NAME (d)))
{
if (tc == RECORD_TYPE)
r = &emit_class<class_> (t, file, line, clmn);
@@ -1824,7 +1824,7 @@ create_type (tree t,
ts << "start anon/stub " << gcc_tree_code_name(tc) << " at "
<< file << ":" << line << endl;
- if (d == NULL_TREE || anon_aggrname_p (DECL_NAME (d)))
+ if (d == NULL_TREE || IDENTIFIER_ANON_P (DECL_NAME (d)))
{
r = &emit_enum (t, access, file, line, clmn);
}
diff --git a/odb/semantics/elements.cxx b/odb/semantics/elements.cxx
index f937f54..2d266cf 100644
--- a/odb/semantics/elements.cxx
+++ b/odb/semantics/elements.cxx
@@ -75,7 +75,7 @@ namespace semantics
if (tree decl = TYPE_NAME (n))
name = DECL_NAME (decl);
- return name != 0 && anon_aggrname_p (name);
+ return name != 0 && IDENTIFIER_ANON_P (name);
}
return true;
@@ -124,7 +124,7 @@ namespace semantics
if (tree decl = TYPE_NAME (type))
{
name = DECL_NAME (decl);
- if (name != 0 && anon_aggrname_p (name))
+ if (name != 0 && IDENTIFIER_ANON_P (name))
return true;
tree s (CP_DECL_CONTEXT (decl));
--
2.26.2
+9
View File
@@ -0,0 +1,9 @@
config BR2_PACKAGE_HOST_ODB
bool "host-odb"
select BR2_NEEDS_HOST_GCC_PLUGIN_SUPPORT
help
This is a compiler that takes a specially crafted c++ header
file and auto-generates a schema that works with libodb and
the subsequent libodb-database library.
https://www.codesynthesis.com/products/odb/
+6
View File
@@ -0,0 +1,6 @@
# From https://www.codesynthesis.com/products/odb/download.xhtml
sha1 810fc02e591429ed19f5a2699d144fb611fb121b odb-2.4.0.tar.bz2
# Locally computed
sha256 6785154fa98ea3977c8c2ab38cec16c4aa78c2c2039e80cd2908347b1c1d4198 odb-2.4.0.tar.bz2
sha256 7983b82cb1f1686ac2b55420ded9c0f348f93dd17bf3e048ae3b25c1da51b80e LICENSE
+21
View File
@@ -0,0 +1,21 @@
################################################################################
#
# odb
#
################################################################################
ODB_VERSION_MAJOR = 2.4
ODB_VERSION = $(ODB_VERSION_MAJOR).0
ODB_SOURCE = odb-$(ODB_VERSION).tar.bz2
ODB_SITE = https://www.codesynthesis.com/download/odb/$(ODB_VERSION_MAJOR)
ODB_LICENSE = GPL-3.0
ODB_LICENSE_FILES = LICENSE
HOST_ODB_DEPENDENCIES = host-libcutl
HOST_ODB_CONF_ENV = CXXFLAGS="$(HOST_CXXFLAGS) -std=c++11"
# Prevent odb from trying to install the gcc plugin into the hosts
# gcc plugin directory. Instead, this will install the gcc plugin
# into host/libexec/odb
HOST_ODB_CONF_OPTS = --with-gcc-plugin-dir=no
$(eval $(host-autotools-package))