cp-tree.h (DECL_THUNKS): NULL_TREE for non-virtual functions.
authorJason Merrill <jason@redhat.com>
Thu, 11 Oct 2012 15:13:36 +0000 (11:13 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 11 Oct 2012 15:13:36 +0000 (11:13 -0400)
* cp-tree.h (DECL_THUNKS): NULL_TREE for non-virtual functions.
(SET_DECL_THUNKS): New.
* decl.c (duplicate_decls): Adjust.
* method.c (make_thunk): Adjust.

From-SVN: r192368

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/method.c

index eadfb6ed4d6ca4b4ab7f1f9547fec1c9ba89bab8..549ddbdc31980077f119e8ad2fa0efc3d19b671e 100644 (file)
@@ -1,5 +1,10 @@
 2012-10-11  Jason Merrill  <jason@redhat.com>
 
+       * cp-tree.h (DECL_THUNKS): NULL_TREE for non-virtual functions.
+       (SET_DECL_THUNKS): New.
+       * decl.c (duplicate_decls): Adjust.
+       * method.c (make_thunk): Adjust.
+
        * decl.c (grokdeclarator): Set DECL_GNU_TLS_P for static data
        members, too.
 
index 35819ed10c48f2e398a8a5fae3d88068ae0db7ca..fdf122fe2aebeb9bd8e86a07fe1ec96b8173ffa7 100644 (file)
@@ -2378,7 +2378,11 @@ struct GTY((variable_size)) lang_decl {
 
 /* The thunks associated with NODE, a FUNCTION_DECL.  */
 #define DECL_THUNKS(NODE) \
-  (LANG_DECL_FN_CHECK (NODE)->context)
+  (DECL_VIRTUAL_P (NODE) ? LANG_DECL_FN_CHECK (NODE)->context : NULL_TREE)
+
+/* Set DECL_THUNKS.  */
+#define SET_DECL_THUNKS(NODE,THUNKS) \
+  (LANG_DECL_FN_CHECK (NODE)->context = (THUNKS))
 
 /* Nonzero if NODE is a thunk, rather than an ordinary function.  */
 #define DECL_THUNK_P(NODE)                     \
index e78c664ba6a9a32516331786cc47448354c6fd43..f97f7b193a0ffe200270529ec84714d8ab7924b4 100644 (file)
@@ -2052,7 +2052,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
          /* DECL_THUNKS is only valid for virtual functions,
             otherwise it is a DECL_FRIEND_CONTEXT.  */
          if (DECL_VIRTUAL_P (newdecl))
-           DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
+           SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
        }
       /* Only variables have this field.  */
       else if (TREE_CODE (newdecl) == VAR_DECL
index a42ed60a99f2567dbcca48fd29adab027fdc9a8c..4d44c7dd38289c6662b453e0d0b6a85f2b7561e4 100644 (file)
@@ -126,7 +126,8 @@ make_thunk (tree function, bool this_adjusting,
                      FUNCTION_DECL, NULL_TREE, TREE_TYPE (function));
   DECL_LANG_SPECIFIC (thunk) = DECL_LANG_SPECIFIC (function);
   cxx_dup_lang_specific_decl (thunk);
-  DECL_THUNKS (thunk) = NULL_TREE;
+  DECL_VIRTUAL_P (thunk) = true;
+  SET_DECL_THUNKS (thunk, NULL_TREE);
 
   DECL_CONTEXT (thunk) = DECL_CONTEXT (function);
   TREE_READONLY (thunk) = TREE_READONLY (function);
@@ -157,7 +158,7 @@ make_thunk (tree function, bool this_adjusting,
 
   /* Add it to the list of thunks associated with FUNCTION.  */
   DECL_CHAIN (thunk) = DECL_THUNKS (function);
-  DECL_THUNKS (function) = thunk;
+  SET_DECL_THUNKS (function, thunk);
 
   return thunk;
 }