> > The problem here seems to be that Ada constructs an variable that is
> > DECL_EXTERNAL, passes const_value_known_p and has DECL_INITIAL, yet its
> > TREE_STATIC is not set. C++ always output those variables with TREE_STATIC
> > set and to be honest, I am unsure what is intended semantics of this flag
> > in this case.
> 
> Ada used to do that (set both DECL_EXTERNAL and TREE_STATIC) but was fixed.
> 
> > Is folding through these variables desirable in Ada?  If not, i would
> > suggest clear DECL_INITIAL (it is useless), if it is, we can either relatex
> > the varpool_finalize_decl check or arrange TREE_STATIC to not be set.
> 
> Yes, this is desirable.

OK, does the following patch fix the problem?  I will try to understand how 
conistent
is C++ frontend about the flags.  It would be nice to have safer way to declare 
the
"static var in other unit" than combination of EXTERNAL and STATIC...

Honza

Index: cgraphunit.c
===================================================================
--- cgraphunit.c        (revision 187650)
+++ cgraphunit.c        (working copy)
@@ -819,7 +819,7 @@ varpool_finalize_decl (tree decl)
 {
   struct varpool_node *node = varpool_node (decl);
 
-  gcc_assert (TREE_STATIC (decl));
+  gcc_assert (TREE_STATIC (decl) || DECL_EXTERNAL (decl));
 
   if (node->finalized)
     return;

Reply via email to