decl.c (warn_extern_redeclared_static): Don't get confused by static member functions.
* decl.c (warn_extern_redeclared_static): Don't get confused by static member functions. (duplicate_decls): Merge DECL_THIS_STATIC. * decl.c (expand_static_init): Make sure assignments to local statics actually occur. From-SVN: r29477
This commit is contained in:
parent
80d789a4d5
commit
963d575811
|
@ -1,3 +1,12 @@
|
|||
1999-09-17 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* decl.c (warn_extern_redeclared_static): Don't get confused by
|
||||
static member functions.
|
||||
(duplicate_decls): Merge DECL_THIS_STATIC.
|
||||
|
||||
* decl.c (expand_static_init): Make sure assignments to local
|
||||
statics actually occur.
|
||||
|
||||
1999-09-17 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* call.c (perform_implicit_conversion): Deal with error_mark_node.
|
||||
|
|
|
@ -2939,6 +2939,12 @@ warn_extern_redeclared_static (newdecl, olddecl)
|
|||
|
||||
if (TREE_CODE (newdecl) == TYPE_DECL)
|
||||
return;
|
||||
|
||||
/* Don't get confused by static member functions; that's a different
|
||||
use of `static'. */
|
||||
if (TREE_CODE (newdecl) == FUNCTION_DECL
|
||||
&& DECL_STATIC_FUNCTION_P (newdecl))
|
||||
return;
|
||||
|
||||
/* If the old declaration was `static', or the new one isn't, then
|
||||
then everything is OK. */
|
||||
|
@ -3284,6 +3290,7 @@ duplicate_decls (newdecl, olddecl)
|
|||
DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
|
||||
DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
|
||||
DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
|
||||
DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
|
||||
new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
|
||||
|
||||
/* Optionally warn about more than one declaration for the same
|
||||
|
@ -7987,9 +7994,12 @@ expand_static_init (decl, init)
|
|||
|| (init && TREE_CODE (init) == TREE_LIST))
|
||||
assignment = build_aggr_init (decl, init, 0);
|
||||
else if (init)
|
||||
/* The initialization we're doing here is just a bitwise
|
||||
copy. */
|
||||
assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
|
||||
{
|
||||
/* The initialization we're doing here is just a bitwise
|
||||
copy. */
|
||||
assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
|
||||
TREE_SIDE_EFFECTS (assignment) = 1;
|
||||
}
|
||||
else
|
||||
assignment = NULL_TREE;
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
// Build don't link:
|
||||
// Origin: Jason Merrill <jason@cygnus.com>
|
||||
|
||||
static int f ();
|
||||
int f ();
|
||||
static int f ();
|
|
@ -0,0 +1,9 @@
|
|||
// Origin: Jason Merrill <jason@cygnus.com>
|
||||
|
||||
int j = 42;
|
||||
|
||||
int main ()
|
||||
{
|
||||
static int i = j;
|
||||
return (i != 42);
|
||||
}
|
Loading…
Reference in New Issue