core: Rename DECL_IS_BUILTIN -> DECL_IS_UNDECLARED_BUILTIN
authorNathan Sidwell <nathan@acm.org>
Fri, 6 Nov 2020 17:59:21 +0000 (09:59 -0800)
committerNathan Sidwell <nathan@acm.org>
Fri, 6 Nov 2020 18:50:51 +0000 (10:50 -0800)
In cleaning up C++'s handling of hidden decls, I renamed its
DECL_BUILTIN_P, which checks for loc == BUILTINS_LOCATION to
DECL_UNDECLARED_BUILTIN_P, because the location gets updated, if user
source declares the builtin, and the predicate no longer holds.  The
original name was confusing me.  (The builtin may still retain builtin
properties in the redeclaration, and other predicates can still detect
that.)

I discovered that tree.h had its own variant 'DECL_IS_BUILTIN', which
behaves in (almost) the same manner.  And therefore has the same
mutating behaviour.

This patch deletes the C++ one, and renames tree.h's to
DECL_IS_UNDECLARED_BUILTIN, to emphasize its non-constantness.  I
guess _IS_ wins over _P

gcc/
* tree.h (DECL_IS_BUILTIN): Rename to ...
(DECL_IS_UNDECLARED_BUILTIN): ... here.  No need to use SOURCE_LOCUS.
* calls.c (maybe_warn_alloc_args_overflow): Adjust for rename.
* cfgexpand.c (pass_expand::execute): Likewise.
* dwarf2out.c (base_type_die, is_naming_typedef_decl): Likewise.
* godump.c (go_decl, go_type_decl): Likewise.
* print-tree.c (print_decl_identifier): Likewise.
* tree-pretty-print.c (dump_generic_node): Likewise.
* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Likewise.
* xcoffout.c (xcoff_assign_fundamental_type_number): Likewise.
gcc/c-family/
* c-ada-spec.c (collect_ada_nodes): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
(collect_ada_node): Likewise.
(dump_forward_type): Likewise.
* c-common.c (set_underlying_type): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
(user_facing_original_type, c_common_finalize_early_debug): Likewise.
gcc/c/
* c-decl.c (diagnose_mismatched_decls): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
(warn_if_shadowing, implicitly_declare, names_builtin_p)
(collect_source_refs): Likewise.
* c-typeck.c (inform_declaration, inform_for_arg)
(convert_for_assignment): Likewise.
gcc/cp/
* cp-tree.h (DECL_UNDECLARED_BUILTIN_P): Delete.
* cp-objcp-common.c (names_bultin_p): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
* decl.c (decls_match): Likewise.  Replace
DECL_UNDECLARED_BUILTIN_P with DECL_IS_UNDECLARED_BUILTIN.
(duplicate_decls): Likewise.
* decl2.c (collect_source_refs): Likewise.
* name-lookup.c (anticipated_builtin_p, print_binding_level)
(do_nonmember_using_decl): Likewise.
* pt.c (builtin_pack_fn_p): Likewise.
* typeck.c (error_args_num): Likewise.
gcc/lto/
* lto-symtab.c (lto_symtab_merge_decls_1): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
gcc/go/
* go-gcc.cc (Gcc_backend::call_expression): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
libcc1/
* libcc1plugin.cc (address_rewriter): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
* libcp1plugin.cc (supplement_binding): Likewise.

24 files changed:
gcc/c-family/c-ada-spec.c
gcc/c-family/c-common.c
gcc/c/c-decl.c
gcc/c/c-typeck.c
gcc/calls.c
gcc/cfgexpand.c
gcc/cp/cp-objcp-common.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/name-lookup.c
gcc/cp/pt.c
gcc/cp/typeck.c
gcc/dwarf2out.c
gcc/go/go-gcc.cc
gcc/godump.c
gcc/lto/lto-symtab.c
gcc/print-tree.c
gcc/tree-pretty-print.c
gcc/tree-ssa-ccp.c
gcc/tree.h
gcc/xcoffout.c
libcc1/libcc1plugin.cc
libcc1/libcp1plugin.cc

index c75b173eec3145793da6302d6a3dd1dbda86a693..266a7fe0fa439a5566f40e6ffb135dd81a4ee914 100644 (file)
@@ -713,7 +713,7 @@ collect_ada_nodes (tree t, const char *source_file)
      in the context of bindings) and namespaces (we do not handle them properly
      yet).  */
   for (n = t; n; n = TREE_CHAIN (n))
-    if (!DECL_IS_BUILTIN (n)
+    if (!DECL_IS_UNDECLARED_BUILTIN (n)
        && TREE_CODE (n) != NAMESPACE_DECL
        && LOCATION_FILE (decl_sloc (n, false)) == source_file)
       to_dump_count++;
@@ -723,7 +723,7 @@ collect_ada_nodes (tree t, const char *source_file)
 
   /* Store the relevant nodes.  */
   for (n = t; n; n = TREE_CHAIN (n))
-    if (!DECL_IS_BUILTIN (n)
+    if (!DECL_IS_UNDECLARED_BUILTIN (n)
        && TREE_CODE (n) != NAMESPACE_DECL
        && LOCATION_FILE (decl_sloc (n, false)) == source_file)
       to_dump[i++] = n;
@@ -2321,7 +2321,7 @@ dump_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
       return 0;
 
     case TYPE_DECL:
-      if (DECL_IS_BUILTIN (node))
+      if (DECL_IS_UNDECLARED_BUILTIN (node))
        {
          /* Don't print the declaration of built-in types.  */
          if (name_only)
@@ -2444,7 +2444,7 @@ dump_forward_type (pretty_printer *buffer, tree type, tree t, int spc)
       return;
     }
 
-  if (DECL_IS_BUILTIN (decl) || TREE_VISITED (decl))
+  if (DECL_IS_UNDECLARED_BUILTIN (decl) || TREE_VISITED (decl))
     return;
 
   /* Forward declarations are only needed within a given file.  */
index 232a4797c093216d64cdd1c51a92cc0aaceb2198..9302a2461d4af98749bee9abe0e9f15cf2d678e4 100644 (file)
@@ -7839,7 +7839,7 @@ set_underlying_type (tree x)
 {
   if (x == error_mark_node)
     return;
-  if (DECL_IS_BUILTIN (x) && TREE_CODE (TREE_TYPE (x)) != ARRAY_TYPE)
+  if (DECL_IS_UNDECLARED_BUILTIN (x) && TREE_CODE (TREE_TYPE (x)) != ARRAY_TYPE)
     {
       if (TYPE_NAME (TREE_TYPE (x)) == 0)
        TYPE_NAME (TREE_TYPE (x)) = x;
@@ -7873,7 +7873,7 @@ user_facing_original_type_p (const_tree type)
   tree decl = TYPE_NAME (type);
 
   /* Look through any typedef in "user" code.  */
-  if (!DECL_IN_SYSTEM_HEADER (decl) && !DECL_IS_BUILTIN (decl))
+  if (!DECL_IN_SYSTEM_HEADER (decl) && !DECL_IS_UNDECLARED_BUILTIN (decl))
     return true;
 
   /* If the original type is also named and is in the user namespace,
@@ -8369,13 +8369,13 @@ reject_gcc_builtin (const_tree expr, location_t loc /* = UNKNOWN_LOCATION */)
   if (TREE_TYPE (expr)
       && TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
       && TREE_CODE (expr) == FUNCTION_DECL
-      /* The intersection of DECL_BUILT_IN and DECL_IS_BUILTIN avoids
+      /* The intersection of DECL_BUILT_IN and DECL_IS_UNDECLARED_BUILTIN avoids
         false positives for user-declared built-ins such as abs or
         strlen, and for C++ operators new and delete.
         The c_decl_implicit() test avoids false positives for implicitly
         declared built-ins with library fallbacks (such as abs).  */
       && fndecl_built_in_p (expr)
-      && DECL_IS_BUILTIN (expr)
+      && DECL_IS_UNDECLARED_BUILTIN (expr)
       && !c_decl_implicit (expr)
       && !DECL_ASSEMBLER_NAME_SET_P (expr))
     {
@@ -9137,7 +9137,8 @@ c_common_finalize_early_debug (void)
   struct cgraph_node *cnode;
   FOR_EACH_FUNCTION (cnode)
     if (!cnode->alias && !cnode->thunk
-       && (cnode->has_gimple_body_p () || !DECL_IS_BUILTIN (cnode->decl)))
+       && (cnode->has_gimple_body_p ()
+           || !DECL_IS_UNDECLARED_BUILTIN (cnode->decl)))
       (*debug_hooks->early_global_decl) (cnode->decl);
 }
 
index d4179aad189aae7f209f217140d113bf1753cf97..f19c82c81dda1855ba509db45317d651677b27c6 100644 (file)
@@ -2051,7 +2051,7 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
            }
        }
       else if (TREE_CODE (olddecl) == FUNCTION_DECL
-              && DECL_IS_BUILTIN (olddecl))
+              && DECL_IS_UNDECLARED_BUILTIN (olddecl))
        {
          /* A conflicting function declaration for a predeclared
             function that isn't actually built in.  Objective C uses
@@ -2265,7 +2265,7 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
             built in, newdecl silently overrides olddecl.  The latter
             occur only in Objective C; see also above.  (FIXME: Make
             Objective C use normal builtins.)  */
-         if (!DECL_IS_BUILTIN (olddecl)
+         if (!DECL_IS_UNDECLARED_BUILTIN (olddecl)
              && !DECL_EXTERN_INLINE (olddecl))
            {
              auto_diagnostic_group d;
@@ -2978,7 +2978,7 @@ warn_if_shadowing (tree new_decl)
         || warn_shadow_local
         || warn_shadow_compatible_local)
       /* No shadow warnings for internally generated vars.  */
-      || DECL_IS_BUILTIN (new_decl))
+      || DECL_IS_UNDECLARED_BUILTIN (new_decl))
     return;
 
   /* Is anything being shadowed?  Invisible decls do not count.  */
@@ -3631,7 +3631,7 @@ implicitly_declare (location_t loc, tree functionid)
         in the external scope because they're pushed before the file
         scope gets created.  Catch this here and rebind them into the
         file scope.  */
-      if (!fndecl_built_in_p (decl) && DECL_IS_BUILTIN (decl))
+      if (!fndecl_built_in_p (decl) && DECL_IS_UNDECLARED_BUILTIN (decl))
        {
          bind (functionid, decl, file_scope,
                /*invisible=*/false, /*nested=*/true,
@@ -10500,7 +10500,7 @@ names_builtin_p (const char *name)
 {
   tree id = get_identifier (name);
   if (tree decl = identifier_global_value (id))
-    return TREE_CODE (decl) == FUNCTION_DECL && DECL_IS_BUILTIN (decl);
+    return TREE_CODE (decl) == FUNCTION_DECL && DECL_IS_UNDECLARED_BUILTIN (decl);
 
   /* Also detect common reserved C words that aren't strictly built-in
      functions.  */
@@ -12134,12 +12134,12 @@ collect_source_refs (void)
     { 
       decls = DECL_INITIAL (t);
       for (decl = BLOCK_VARS (decls); decl; decl = TREE_CHAIN (decl))
-       if (!DECL_IS_BUILTIN (decl))
+       if (!DECL_IS_UNDECLARED_BUILTIN (decl))
          collect_source_ref (DECL_SOURCE_FILE (decl));
     }
 
   for (decl = BLOCK_VARS (ext_block); decl; decl = TREE_CHAIN (decl))
-    if (!DECL_IS_BUILTIN (decl))
+    if (!DECL_IS_UNDECLARED_BUILTIN (decl))
       collect_source_ref (DECL_SOURCE_FILE (decl));
 }
 
index 2bf46f44c6e379d74343395edb3fdd6ae6f646ff..96840377d9020f20f33d92d9a5f0301a04e65242 100644 (file)
@@ -3014,7 +3014,8 @@ build_function_call (location_t loc, tree function, tree params)
 static void
 inform_declaration (tree decl)
 {
-  if (decl && (TREE_CODE (decl) != FUNCTION_DECL || !DECL_IS_BUILTIN (decl)))
+  if (decl && (TREE_CODE (decl) != FUNCTION_DECL
+              || !DECL_IS_UNDECLARED_BUILTIN (decl)))
     inform (DECL_SOURCE_LOCATION (decl), "declared here");
 }
 
@@ -6578,7 +6579,7 @@ inform_for_arg (tree fundecl, location_t ploc, int parmnum,
                tree expected_type, tree actual_type)
 {
   location_t loc;
-  if (fundecl && !DECL_IS_BUILTIN (fundecl))
+  if (fundecl && !DECL_IS_UNDECLARED_BUILTIN (fundecl))
     loc = get_fndecl_argument_location (fundecl, parmnum - 1);
   else
     loc = ploc;
@@ -6828,7 +6829,7 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type,
            if (pedwarn (expr_loc, OPT_Wc___compat, "enum conversion when "
                         "passing argument %d of %qE is invalid in C++",
                         parmnum, rname))
-             inform ((fundecl && !DECL_IS_BUILTIN (fundecl))
+             inform ((fundecl && !DECL_IS_UNDECLARED_BUILTIN (fundecl))
                      ? DECL_SOURCE_LOCATION (fundecl) : expr_loc,
                      "expected %qT but argument is of type %qT",
                      type, rhstype);
@@ -7239,7 +7240,8 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type,
          case ic_argpass:
            /* Do not warn for built-in functions, for example memcpy, since we
               control how they behave and they can be useful in this area.  */
-           if (TREE_CODE (rname) != FUNCTION_DECL || !DECL_IS_BUILTIN (rname))
+           if (TREE_CODE (rname) != FUNCTION_DECL
+               || !DECL_IS_UNDECLARED_BUILTIN (rname))
              warning_at (location, OPT_Wscalar_storage_order,
                          "passing argument %d of %qE from incompatible "
                          "scalar storage order", parmnum, rname);
index 1a7632d2d4867faed8ad3e74e61deb1050bddfb6..a93d4bf078743e0f2b4618fe4a60942773a4dfd7 100644 (file)
@@ -1548,7 +1548,7 @@ maybe_warn_alloc_args_overflow (tree fn, tree exp, tree args[2], int idx[2])
     {
       location_t fnloc = DECL_SOURCE_LOCATION (fn);
 
-      if (DECL_IS_BUILTIN (fn))
+      if (DECL_IS_UNDECLARED_BUILTIN (fn))
        inform (loc,
                "in a call to built-in allocation function %qD", fn);
       else
index 6c41a7e21a7cef38ba063a26509e067ba81da349..b2d86859b3922e61d78a6b7e5944958de8c8daa5 100644 (file)
@@ -6412,7 +6412,7 @@ pass_expand::execute (function *fun)
   rtl_profile_for_bb (ENTRY_BLOCK_PTR_FOR_FN (fun));
 
   insn_locations_init ();
-  if (!DECL_IS_BUILTIN (current_function_decl))
+  if (!DECL_IS_UNDECLARED_BUILTIN (current_function_decl))
     {
       /* Eventually, all FEs should explicitly set function_start_locus.  */
       if (LOCATION_LOCUS (fun->function_start_locus) == UNKNOWN_LOCATION)
index e1397b7b7104a05f7c8aa60d6017adb11f046a9a..a38bb0a06614bcc3437b4cfe2e18f6f75c9423f6 100644 (file)
@@ -366,7 +366,8 @@ names_builtin_p (const char *name)
   tree id = get_identifier (name);
   if (tree binding = get_global_binding (id))
     {
-      if (TREE_CODE (binding) == FUNCTION_DECL && DECL_IS_BUILTIN (binding))
+      if (TREE_CODE (binding) == FUNCTION_DECL
+         && DECL_IS_UNDECLARED_BUILTIN (binding))
        return true;
 
       /* Handle the case when an overload for a  built-in name exists.  */
@@ -376,7 +377,7 @@ names_builtin_p (const char *name)
       for (ovl_iterator it (binding); it; ++it)
        {
          tree decl = *it;
-         if (DECL_IS_BUILTIN (decl))
+         if (DECL_IS_UNDECLARED_BUILTIN (decl))
            return true;
        }
     }
index fde9f63ec0552c1b100cb06cbfdf143c63511de5..052291c40fe709a6b8e5b1d8a215d95a479b6da8 100644 (file)
@@ -4038,11 +4038,6 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter)
 #define FNDECL_USED_AUTO(NODE) \
   TREE_LANG_FLAG_2 (FUNCTION_DECL_CHECK (NODE))
 
-/* True if NODE is an undeclared builtin decl.  As soon as the user
-   declares it, the location will be updated.  */
-#define DECL_UNDECLARED_BUILTIN_P(NODE) \
-  (DECL_SOURCE_LOCATION(NODE) == BUILTINS_LOCATION)
-
 /* True for artificial decls added for OpenMP privatized non-static
    data members.  */
 #define DECL_OMP_PRIVATIZED_MEMBER(NODE) \
index 98c1a5decf251e5f1259ebe3edef47d058c2805b..56bd772d01d72489771f31bc7596893feac4076a 100644 (file)
@@ -1002,7 +1002,7 @@ decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
 
       /* A new declaration doesn't match a built-in one unless it
         is also extern "C".  */
-      if (DECL_IS_BUILTIN (olddecl)
+      if (DECL_IS_UNDECLARED_BUILTIN (olddecl)
          && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
        return 0;
 
@@ -1205,7 +1205,7 @@ check_redeclaration_exception_specification (tree new_decl,
      all declarations, including the definition and an explicit
      specialization, of that function shall have an
      exception-specification with the same set of type-ids.  */
-  if (! DECL_IS_BUILTIN (old_decl)
+  if (! DECL_IS_UNDECLARED_BUILTIN (old_decl)
       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
     {
       const char *const msg
@@ -1465,7 +1465,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
 
   /* Check for redeclaration and other discrepancies.  */
   if (TREE_CODE (olddecl) == FUNCTION_DECL
-      && DECL_UNDECLARED_BUILTIN_P (olddecl))
+      && DECL_IS_UNDECLARED_BUILTIN (olddecl))
     {
       if (TREE_CODE (newdecl) != FUNCTION_DECL)
        {
@@ -1517,7 +1517,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
 
              /* A new declaration doesn't match a built-in one unless it
                 is also extern "C".  */
-             gcc_assert (DECL_IS_BUILTIN (olddecl));
+             gcc_assert (DECL_IS_UNDECLARED_BUILTIN (olddecl));
              gcc_assert (DECL_EXTERN_C_P (olddecl));
              if (!DECL_EXTERN_C_P (newdecl))
                return NULL_TREE;
@@ -1627,11 +1627,11 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
          /* Replace the old RTL to avoid problems with inlining.  */
          COPY_DECL_RTL (newdecl, olddecl);
        }
-      /* Even if the types match, prefer the new declarations type for
-        built-ins which have not been explicitly declared, for
-        exception lists, etc...  */
-      else if (DECL_IS_BUILTIN (olddecl))
+      else 
        {
+         /* Even if the types match, prefer the new declarations type
+            for built-ins which have not been explicitly declared,
+            for exception lists, etc...  */
          tree type = TREE_TYPE (newdecl);
          tree attribs = (*targetm.merge_type_attributes)
            (TREE_TYPE (olddecl), type);
index 71107e03010983602e66bf0179acda0198eec276..1bc7b7e0197a106accb94febc4fe95a219dcae15 100644 (file)
@@ -4347,7 +4347,7 @@ collect_source_refs (tree namespc)
 {
   /* Iterate over names in this name space.  */
   for (tree t = NAMESPACE_LEVEL (namespc)->names; t; t = TREE_CHAIN (t))
-    if (DECL_IS_BUILTIN (t))
+    if (DECL_IS_UNDECLARED_BUILTIN (t))
       ;
     else if (TREE_CODE (t) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (t))
       collect_source_refs (t);
index 6a88e68c346b7231390d6a2e01652fc83ee7b57c..5bda4c2eea93a86f649c25bed6557e72d6d4a609 100644 (file)
@@ -1946,7 +1946,7 @@ anticipated_builtin_p (tree ovl)
 {
   return (TREE_CODE (ovl) == OVERLOAD
          && OVL_HIDDEN_P (ovl)
-         && DECL_UNDECLARED_BUILTIN_P (OVL_FUNCTION (ovl)));
+         && DECL_IS_UNDECLARED_BUILTIN (OVL_FUNCTION (ovl)));
 }
 
 /* BINDING records an existing declaration for a name in the current scope.
@@ -3508,7 +3508,7 @@ print_binding_level (cp_binding_level* lvl)
            continue;
          if (no_print_builtins
              && (TREE_CODE (t) == TYPE_DECL)
-             && DECL_IS_BUILTIN (t))
+             && DECL_IS_UNDECLARED_BUILTIN (t))
            continue;
 
          /* Function decls tend to have longer names.  */
@@ -3826,7 +3826,7 @@ do_nonmember_using_decl (name_lookup &lookup, bool fn_scope_p,
                }
              else if (old.using_p ())
                continue; /* This is a using decl. */
-             else if (old.hidden_p () && DECL_UNDECLARED_BUILTIN_P (old_fn))
+             else if (old.hidden_p () && DECL_IS_UNDECLARED_BUILTIN (old_fn))
                continue; /* This is an anticipated builtin.  */
              else if (!matching_fn_p (new_fn, old_fn))
                continue; /* Parameters do not match.  */
index c033a286407d30a60e4e195944a0cfd17436e503..2a885a90857bf8c8ac66fef326cb61a653c43241 100644 (file)
@@ -3767,7 +3767,7 @@ builtin_pack_fn_p (tree fn)
 {
   if (!fn
       || TREE_CODE (fn) != FUNCTION_DECL
-      || !DECL_IS_BUILTIN (fn))
+      || !DECL_IS_UNDECLARED_BUILTIN (fn))
     return false;
 
   if (id_equal (DECL_NAME (fn), "__integer_pack"))
index d3b701610cfb79491182008f9b58ec247d9d7a70..08e0c80f9b021bb3ecd4bc4cb26baf7226ba337c 100644 (file)
@@ -4062,7 +4062,7 @@ error_args_num (location_t loc, tree fndecl, bool too_many_p)
                  ? G_("too many arguments to function %q#D")
                  : G_("too few arguments to function %q#D"),
                  fndecl);
-      if (!DECL_IS_BUILTIN (fndecl))
+      if (!DECL_IS_UNDECLARED_BUILTIN (fndecl))
        inform (DECL_SOURCE_LOCATION (fndecl), "declared here");
     }
   else
index 81cb7341a7e4e5b9b95424990ca07b6e4a6c7b8c..bc32a17efcd9a64551a6557fb9f7be6a64e9c623 100644 (file)
@@ -12855,7 +12855,7 @@ base_type_die (tree type, bool reverse)
       if ((dwarf_version >= 4 || !dwarf_strict)
          && TYPE_NAME (type)
          && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
-         && DECL_IS_BUILTIN (TYPE_NAME (type))
+         && DECL_IS_UNDECLARED_BUILTIN (TYPE_NAME (type))
          && DECL_NAME (TYPE_NAME (type)))
        {
          const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
@@ -26046,7 +26046,7 @@ is_naming_typedef_decl (const_tree decl)
       || TREE_CODE (decl) != TYPE_DECL
       || DECL_NAMELESS (decl)
       || !is_tagged_type (TREE_TYPE (decl))
-      || DECL_IS_BUILTIN (decl)
+      || DECL_IS_UNDECLARED_BUILTIN (decl)
       || is_redundant_typedef (decl)
       /* It looks like Ada produces TYPE_DECLs that are very similar
          to C++ naming typedefs but that have different
@@ -26958,7 +26958,7 @@ dwarf2out_decl (tree decl)
 
       /* Don't bother trying to generate any DIEs to represent any of the
         normal built-in types for the language we are compiling.  */
-      if (DECL_IS_BUILTIN (decl))
+      if (DECL_IS_UNDECLARED_BUILTIN (decl))
        return;
 
       /* If we are in terse mode, don't generate any DIEs for types.  */
index 505fb1528fa37209406de35c2a8a3d9a2d95dd71..ba286fa8e82e2f83133e906de6716be59edac7da 100644 (file)
@@ -2110,7 +2110,7 @@ Gcc_backend::call_expression(Bfunction*, // containing fcn for call
   if (optimize
       && TREE_CODE(fndecl) == FUNCTION_DECL
       && fndecl_built_in_p (fndecl, BUILT_IN_NORMAL)
-      && DECL_IS_BUILTIN (fndecl)
+      && DECL_IS_UNDECLARED_BUILTIN (fndecl)
       && nargs > 0
       && ((SCALAR_FLOAT_TYPE_P(rettype)
           && SCALAR_FLOAT_TYPE_P(TREE_TYPE(args[0])))
index a7cd7edf7a48c9779e048150211d1e14f494d378..29a45ce89792ab5229ded6976e24e929c9b504fc 100644 (file)
@@ -484,7 +484,7 @@ static void
 go_decl (tree decl)
 {
   if (!TREE_PUBLIC (decl)
-      || DECL_IS_BUILTIN (decl)
+      || DECL_IS_UNDECLARED_BUILTIN (decl)
       || DECL_NAME (decl) == NULL_TREE)
     return;
   vec_safe_push (queue, decl);
@@ -522,7 +522,7 @@ go_type_decl (tree decl, int local)
 {
   real_debug_hooks->type_decl (decl, local);
 
-  if (local || DECL_IS_BUILTIN (decl))
+  if (local || DECL_IS_UNDECLARED_BUILTIN (decl))
     return;
   if (DECL_NAME (decl) == NULL_TREE
       && (TYPE_NAME (TREE_TYPE (decl)) == NULL_TREE
index d5e38beb4b679795cdfd2855f631b0970d6a9cb5..0058d98bdb9e49f5b1d604b4a57ed365b03599d8 100644 (file)
@@ -694,8 +694,8 @@ lto_symtab_merge_decls_2 (symtab_node *first, bool diagnosed_p)
         location in that case.  It also happens for AVR if two built-ins
         use the same asm name because their libgcc assembler code is the
         same, see PR78562.  */
-      if (DECL_IS_BUILTIN (prevailing->decl)
-         && DECL_IS_BUILTIN (decl))
+      if (DECL_IS_UNDECLARED_BUILTIN (prevailing->decl)
+         && DECL_IS_UNDECLARED_BUILTIN (decl))
        continue;
 
       int level = warn_type_compatibility_p (TREE_TYPE (prevailing->decl),
index 84bf8199b1eeb19366ddeaadfdb86ea16309ba00..17c88f81770b49c41780722038cd927289846763 100644 (file)
@@ -1052,7 +1052,7 @@ print_decl_identifier (FILE *file, tree decl, int flags)
 
   if (flags & PRINT_DECL_ORIGIN)
     {
-      if (DECL_IS_BUILTIN (decl))
+      if (DECL_IS_UNDECLARED_BUILTIN (decl))
        fputs ("<built-in>", file);
       else
        {
index bd60d74d1af8294a76e44c50e8331154ca55d98c..318f048bcff4a48df44573aa098ee6a7f51db115 100644 (file)
@@ -2165,7 +2165,7 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, dump_flags_t flags,
       break;
 
     case TYPE_DECL:
-      if (DECL_IS_BUILTIN (node))
+      if (DECL_IS_UNDECLARED_BUILTIN (node))
        {
          /* Don't print the declaration of built-in types.  */
          break;
index ef44e66ce8b7d1b984c2d0e37eb7c1c0882420bf..23b2902ecfca822b0d467d4f6dd8d45440c13a55 100644 (file)
@@ -3583,7 +3583,7 @@ pass_post_ipa_warn::execute (function *fun)
                continue;
 
              tree fndecl = gimple_call_fndecl (stmt);
-             if (fndecl && DECL_IS_BUILTIN (fndecl))
+             if (fndecl && DECL_IS_UNDECLARED_BUILTIN (fndecl))
                inform (loc, "in a call to built-in function %qD",
                        fndecl);
              else if (fndecl)
index caf6287f90969ecaa07b5931536f7d16bd98c776..f8f0a60643961fe16cd1d082ce49105e24185423 100644 (file)
@@ -2456,11 +2456,12 @@ extern tree vector_element_bits_tree (const_tree);
 #define DECL_SOURCE_FILE(NODE) LOCATION_FILE (DECL_SOURCE_LOCATION (NODE))
 #define DECL_SOURCE_LINE(NODE) LOCATION_LINE (DECL_SOURCE_LOCATION (NODE))
 #define DECL_SOURCE_COLUMN(NODE) LOCATION_COLUMN (DECL_SOURCE_LOCATION (NODE))
-/* This accessor returns TRUE if the decl it operates on was created
-   by a front-end or back-end rather than by user code.  In this case
-   builtin-ness is indicated by source location.  */
-#define DECL_IS_BUILTIN(DECL) \
-  (LOCATION_LOCUS (DECL_SOURCE_LOCATION (DECL)) <= BUILTINS_LOCATION)
+/* This decl was created by a front-end or back-end rather than by
+   user code, and has not been explicitly declared by the user -- when
+   that happens the source location is updated to the user's
+   source.  This includes decls with no location (!).  */
+#define DECL_IS_UNDECLARED_BUILTIN(DECL) \
+  (DECL_SOURCE_LOCATION (DECL) <= BUILTINS_LOCATION)
 
 /*  For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or
     QUAL_UNION_TYPE node that the field is a member of.  For VAR_DECL,
@@ -6278,9 +6279,8 @@ type_has_mode_precision_p (const_tree t)
 
 /* Return true if a FUNCTION_DECL NODE is a GCC built-in function.
 
-   Note that it is different from the DECL_IS_BUILTIN accessor.  For
-   instance, user declared prototypes of C library functions are not
-   DECL_IS_BUILTIN but may be fndecl_built_in_p.  */
+   Note that it is different from the DECL_IS_UNDECLARED_BUILTIN
+   accessor, as this is impervious to user declaration.  */
 
 inline bool
 fndecl_built_in_p (const_tree node)
index 4e51e62015f75fdd50e1d6d56c90f6b07535e484..1e72c6e2cef5b5526c8139d5bf14ea27a484f8f7 100644 (file)
@@ -164,7 +164,7 @@ xcoff_assign_fundamental_type_number (tree decl)
   size_t i;
 
   /* Do not waste time searching the list for non-intrinsic types.  */
-  if (DECL_NAME (decl) == 0 || ! DECL_IS_BUILTIN (decl))
+  if (DECL_NAME (decl) == 0 || ! DECL_IS_UNDECLARED_BUILTIN (decl))
     return 0;
 
   name = IDENTIFIER_POINTER (DECL_NAME (decl));
index 8351f2e30ddfb061fb778e1cf88d88c494cbc468..241a8158b98bdd51737e278d3200e420701d334e 100644 (file)
@@ -300,7 +300,7 @@ address_rewriter (tree *in, int *walk_subtrees, void *arg)
   decl_addr_value *found_value = ctx->address_map.find (&value);
   if (found_value != NULL)
     ;
-  else if (DECL_IS_BUILTIN (*in))
+  else if (DECL_IS_UNDECLARED_BUILTIN (*in))
     {
       gcc_address address;
 
index d758df8b55604135ff6f64b9e6540fd3d343bc01..bab2751a5ce7711e5a90e364b011ea5fb31e384f 100644 (file)
@@ -353,7 +353,7 @@ supplement_binding (cxx_binding *binding, tree decl)
           /* If TARGET_BVAL is anticipated but has not yet been
              declared, pretend it is not there at all.  */
           || (TREE_CODE (target_bval) == FUNCTION_DECL
-              && DECL_UNDECLARED_BUILTIN_P (target_bval)))
+              && DECL_IS_UNDECLARED_BUILTIN (target_bval)))
     binding->value = decl;
   else if (TREE_CODE (target_bval) == TYPE_DECL
           && DECL_ARTIFICIAL (target_bval)