decl.c (builtin_function_1): Set DCL_ANTICIPATED before pushing.
authorNathan Sidwell <nathan@acm.org>
Mon, 8 May 2017 17:59:03 +0000 (17:59 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Mon, 8 May 2017 17:59:03 +0000 (17:59 +0000)
* decl.c (builtin_function_1): Set DCL_ANTICIPATED before pushing.
(start_preparsed_function): Do decl pushing before setting
current_funciton_decl and announcing it.

From-SVN: r247754

gcc/cp/ChangeLog
gcc/cp/decl.c

index 36ccab6..369a885 100644 (file)
@@ -1,5 +1,9 @@
 2017-05-08  Nathan Sidwell  <nathan@acm.org>
 
+       * decl.c (builtin_function_1): Set DCL_ANTICIPATED before pushing.
+       (start_preparsed_function): Do decl pushing before setting
+       current_funciton_decl and announcing it.
+
        * name-lookup.h (pushdecl_with_scope): Replace with ...
        (pushdecl_outermost_localscope): ... this.
        * name-lookup.c (pushdecl_with_scope): Replace with ...
index fbb8db7..4023c69 100644 (file)
@@ -4375,11 +4375,6 @@ builtin_function_1 (tree decl, tree context, bool is_global)
 
   DECL_CONTEXT (decl) = context;
 
-  if (is_global)
-    pushdecl_top_level (decl);
-  else
-    pushdecl (decl);
-
   /* A function in the user's namespace should have an explicit
      declaration before it is used.  Mark the built-in function as
      anticipated but not actually declared.  */
@@ -4397,6 +4392,11 @@ builtin_function_1 (tree decl, tree context, bool is_global)
        DECL_ANTICIPATED (decl) = 1;
     }
 
+  if (is_global)
+    pushdecl_top_level (decl);
+  else
+    pushdecl (decl);
+
   return decl;
 }
 
@@ -14821,17 +14821,10 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
       decl1 = newdecl1;
     }
 
-  /* We are now in the scope of the function being defined.  */
-  current_function_decl = decl1;
-
-  /* Save the parm names or decls from this function's declarator
-     where store_parm_decls will find them.  */
-  current_function_parms = DECL_ARGUMENTS (decl1);
-
   /* Make sure the parameter and return types are reasonable.  When
      you declare a function, these types can be incomplete, but they
      must be complete when you define the function.  */
-  check_function_type (decl1, current_function_parms);
+  check_function_type (decl1, DECL_ARGUMENTS (decl1));
 
   /* Build the return declaration for the function.  */
   restype = TREE_TYPE (fntype);
@@ -14848,9 +14841,6 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
     }
 
-  /* Let the user know we're compiling this function.  */
-  announce_function (decl1);
-
   /* Record the decl so that the function name is defined.
      If we already have a decl for this name, and it is a FUNCTION_DECL,
      use the old decl.  */
@@ -14922,9 +14912,16 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
        maybe_apply_pragma_weak (decl1);
     }
 
-  /* Reset this in case the call to pushdecl changed it.  */
+  /* We are now in the scope of the function being defined.  */
   current_function_decl = decl1;
 
+  /* Save the parm names or decls from this function's declarator
+     where store_parm_decls will find them.  */
+  current_function_parms = DECL_ARGUMENTS (decl1);
+
+  /* Let the user know we're compiling this function.  */
+  announce_function (decl1);
+
   gcc_assert (DECL_INITIAL (decl1));
 
   /* This function may already have been parsed, in which case just