> I noticed that we set node->definition = true in > varpool_assemble_decl. The surrounding code suggests that we should > only ever get there if definition is already true, so I changed it > to an assert. The question is interesting for some modifications I'm > making for ptx (which requires declarations for external variables > in the assembly). > > The only thing that was tripped by the assert was a variable created > by asan. AFAICT the problem there is that asan calls > varpool_assemble_decl when it should be calling > varpool_finalize_decl. > > Bootstrapped and tested on x86_64-linux, ok? > > > Bernd
> * asan.c (asan_finish_file): Use varpool_finalize_decl instead of > varpool_assemble_decl. > * varpool.c (varpool_assemble_decl): Assert that node->definition is > true. OK, we used to call assemble_decl directly before the transition to varpool was finished, seems I never got around adding an assert. Thanks, Honza > > diff --git a/gcc/asan.c b/gcc/asan.c > index b9a4a91..0d78634 100644 > --- a/gcc/asan.c > +++ b/gcc/asan.c > @@ -2595,7 +2595,7 @@ asan_finish_file (void) > TREE_CONSTANT (ctor) = 1; > TREE_STATIC (ctor) = 1; > DECL_INITIAL (var) = ctor; > - varpool_assemble_decl (varpool_node_for_decl (var)); > + varpool_finalize_decl (var); > > fn = builtin_decl_implicit (BUILT_IN_ASAN_REGISTER_GLOBALS); > tree gcount_tree = build_int_cst (pointer_sized_int_node, gcount); > diff --git a/gcc/varpool.c b/gcc/varpool.c > index 79f07bf..a72fb22 100644 > --- a/gcc/varpool.c > +++ b/gcc/varpool.c > @@ -473,7 +473,7 @@ varpool_assemble_decl (varpool_node *node) > { > assemble_variable (decl, 0, 1, 0); > gcc_assert (TREE_ASM_WRITTEN (decl)); > - node->definition = true; > + gcc_assert (node->definition); > assemble_aliases (node); > return true; > }