On Wed, 14 Mar 2012, Tristan Gingold wrote:

> 
> On Mar 14, 2012, at 5:08 PM, Richard Guenther wrote:
> 
> > On Wed, 14 Mar 2012, Tristan Gingold wrote:
> > 
> >> Hi,
> >> 
> >> the code to call expand_main_function currently only checks DECL_NAME.  
> >> This leads
> >> to a hack in ada/gcc-interface/utils.c to handle the gnatbind generated 
> >> file that could
> >> declare:
> >> 
> >> package ada_main is
> >> …
> >>   function my_main
> >>     (argc : Integer;
> >>      argv : System.Address;
> >>      envp : System.Address)
> >>      return Integer;
> >>   pragma Export (C, my_main, "main");
> >> …
> >> end ada_main;
> >> 
> >> But expand_main_function is also called for function whose name is main 
> >> but assembly name isn't.  Eg:
> >> 
> >> package pkg is
> >>   procedure main;
> >> end pkg;
> >> 
> >> So I think we should consider the assembler name is set, otherwise the 
> >> decl name.
> >> 
> >> Manually tested on ia64-hp-openvms (where this issue was discovered).
> >> No C regressions for x86_64-darwin.
> >> 
> >> Ok for trunk ?
> > 
> > There are more checks for MAIN_NAME_P, so this certainly isn't enough.
> > And if it is a good idea then the whole check, whether a FUNCTION_DECL
> > is considered 'main' should be put into a function in tree.[ch] and
> > used everywhere.  Note that what is 'main' is controlled by
> > main_identifier_node, controlled by frontends.  So - why is that not
> > enough to control for Ada?
> 
> Indeed, I think we could handle this issue in gigi for Ada.  (I also think
> we don't want to handle crazy C code such as 'int my_main () asm ("main")'.
> 
> But, unless I missed something, doing this in gigi won't work with LTO.

Well.  To make this work in LTO the "main" function (thus, the program
entry point) should be marked at cgraph level and all users of
MAIN_NAME_P should instead check a flag on the cgraph node.

> Will write a predicate in tree.[ch].

Please instead transition "main-ness" to the cgraph.

Thanks,
Richard.

Reply via email to