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

