class.c (build_vtbl_initializer): Don't shadow outer variable with static var.
authorNathan Sidwell <nathan@acm.org>
Mon, 8 May 2017 16:58:44 +0000 (16:58 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Mon, 8 May 2017 16:58:44 +0000 (16:58 +0000)
* class.c (build_vtbl_initializer): Don't shadow outer variable
with static var.

From-SVN: r247747

gcc/cp/ChangeLog
gcc/cp/class.c

index 2538783..05f8fa8 100644 (file)
@@ -1,5 +1,8 @@
 2017-05-08  Nathan Sidwell  <nathan@acm.org>
 
+       * class.c (build_vtbl_initializer): Don't shadow outer variable
+       with static var.
+
        Revert _binding -> _value change.
        * name-lookup.h (get_namespace_value, set_global_value): Rename to ...
        (get_namespace_binding, set_global_binding): ... these.
index 945406e..9b996e3 100644 (file)
@@ -9769,18 +9769,19 @@ build_vtbl_initializer (tree binfo,
          /* Likewise for deleted virtuals.  */
          else if (DECL_DELETED_FN (fn_original))
            {
-             static tree fn;
+             static tree dvirt_fn;
 
-             if (!fn)
+             if (!dvirt_fn)
                {
                  tree name = get_identifier ("__cxa_deleted_virtual");
-                 fn = IDENTIFIER_GLOBAL_VALUE (name);
-                 if (!fn)
-                   fn = push_library_fn
+                 dvirt_fn = IDENTIFIER_GLOBAL_VALUE (name);
+                 if (!dvirt_fn)
+                   dvirt_fn = push_library_fn
                      (name,
                       build_function_type_list (void_type_node, NULL_TREE),
                       NULL_TREE, ECF_NORETURN);
                }
+             fn = dvirt_fn;
              if (!TARGET_VTABLE_USES_DESCRIPTORS)
                init = fold_convert (vfunc_ptr_type_node,
                                     build_fold_addr_expr (fn));
@@ -9789,7 +9790,8 @@ build_vtbl_initializer (tree binfo,
            {
              if (!integer_zerop (delta) || vcall_index)
                {
-                 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
+                 fn = make_thunk (fn, /*this_adjusting=*/1,
+                                  delta, vcall_index);
                  if (!DECL_NAME (fn))
                    finish_thunk (fn);
                }