This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/31192] New: functions with __attribute__((externelly_visible)) becomes static when -O -fwhole-program
- From: "leo at yuriev dot ru" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 15 Mar 2007 23:10:14 -0000
- Subject: [Bug middle-end/31192] New: functions with __attribute__((externelly_visible)) becomes static when -O -fwhole-program
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Problem could be easy reproduced by "gcc412 -O1 -fwhole-program -S
gcc-4.1.2/gcc/testsuite/gcc.gd/tree-ssa/wholeprogram-2.c". The output file
wholeprogram-2.s contains:
.file "wholeprogram-2.c"
.text
.type externally_visible_function, @function
externally_visible_function:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.size externally_visible_function, .-externally_visible_function
.ident "GCC: (GNU) 4.1.2"
.section .note.GNU-stack,"",@progbits
Can see the line ".globl externally_visible_function" is absent, so
externally_visible_function() become local, but not public.
It is may be other solution, but my patch is really simple:
diff -Nrcpad gcc-4.1.2-ori/gcc/cgraphunit.c gcc-4.1.2/gcc/cgraphunit.c
*** gcc-4.1.2-ori/gcc/cgraphunit.c Fri Jan 5 22:44:10 2007
--- gcc-4.1.2/gcc/cgraphunit.c Fri Mar 16 01:11:24 2007
*************** process_function_and_variable_attributes
*** 937,942 ****
--- 937,943 ----
if (node->local.finalized)
cgraph_mark_needed_node (node);
node->externally_visible = true;
+ node->local.externally_visible = true;
}
}
for (vnode = cgraph_varpool_nodes; vnode != first_var; vnode = vnode->next)
--
Summary: functions with __attribute__((externelly_visible))
becomes static when -O -fwhole-program
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: leo at yuriev dot ru
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31192