c-decl.c (merge_decls): Keep DECL_SOURCE_LOCATION and DECL_IN_SYSTEM_HEADER in sync.

2007-07-16  Rafael Avila de Espindola  <espindola@google.com>

       * c-decl.c (merge_decls): Keep DECL_SOURCE_LOCATION and
       DECL_IN_SYSTEM_HEADER in sync.

From-SVN: r137873
This commit is contained in:
Rafael Avila de Espindola 2008-07-16 09:14:27 +00:00 committed by Rafael Espindola
parent 20d85a9960
commit 238fe3c54b
2 changed files with 26 additions and 12 deletions

View File

@ -1,3 +1,8 @@
2007-07-16 Rafael Avila de Espindola <espindola@google.com>
* c-decl.c (merge_decls): Keep DECL_SOURCE_LOCATION and
DECL_IN_SYSTEM_HEADER in sync.
2008-07-15 Daniel Berlin <dberlin@dberlin.org> 2008-07-15 Daniel Berlin <dberlin@dberlin.org>
* tree-ssa-sccvn.c (expressions_equal_p): Check type equality. * tree-ssa-sccvn.c (expressions_equal_p): Check type equality.

View File

@ -1679,12 +1679,27 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
if (TREE_DEPRECATED (newdecl)) if (TREE_DEPRECATED (newdecl))
TREE_DEPRECATED (olddecl) = 1; TREE_DEPRECATED (olddecl) = 1;
/* Keep source location of definition rather than declaration and of /* If a decl is in a system header and the other isn't, keep the one on the
prototype rather than non-prototype unless that prototype is system header. Otherwise, keep source location of definition rather than
built-in. */ declaration and of prototype rather than non-prototype unless that
if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0) prototype is built-in. */
|| (old_is_prototype && !new_is_prototype if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
&& !C_DECL_BUILTIN_PROTOTYPE (olddecl))) && DECL_IN_SYSTEM_HEADER (olddecl)
&& !DECL_IN_SYSTEM_HEADER (newdecl) )
{
DECL_IN_SYSTEM_HEADER (newdecl) = 1;
DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
}
else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
&& DECL_IN_SYSTEM_HEADER (newdecl)
&& !DECL_IN_SYSTEM_HEADER (olddecl))
{
DECL_IN_SYSTEM_HEADER (olddecl) = 1;
DECL_SOURCE_LOCATION (olddecl) = DECL_SOURCE_LOCATION (newdecl);
}
else if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
|| (old_is_prototype && !new_is_prototype
&& !C_DECL_BUILTIN_PROTOTYPE (olddecl)))
DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl); DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
/* Merge the initialization information. */ /* Merge the initialization information. */
@ -1700,12 +1715,6 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)) if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
{ {
/* Merge the unused-warning information. */
if (DECL_IN_SYSTEM_HEADER (olddecl))
DECL_IN_SYSTEM_HEADER (newdecl) = 1;
else if (DECL_IN_SYSTEM_HEADER (newdecl))
DECL_IN_SYSTEM_HEADER (olddecl) = 1;
/* Merge the section attribute. /* Merge the section attribute.
We want to issue an error if the sections conflict but that We want to issue an error if the sections conflict but that
must be done later in decl_attributes since we are called must be done later in decl_attributes since we are called