https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117434

--- Comment #8 from kargls at comcast dot net ---
(In reply to Iain Sandoe from comment #7)

> 
> 
>   - however, for O0 we get a MAIN__ function which contains:
>   <bb 2> :
>   FRAME.3.FRAME_BASE.PARENT = 0B;
>   __builtin_init_trampoline (&FRAME.3.test, test, &FRAME.3);
>   _5 = __builtin_adjust_trampoline (&FRAME.3.test);
>   _6 = (logical(kind=4) (*<T6a3>) (void)) _5;
>   test.1_1 = _6;
>   test.2 = test.1_1;
>   test_description = new_test_description (&test.2);
>   test_description ={v} {CLOBBER(eos)};
>   return;
> 
> .. so is, indeed, using a trampoline to call via a pointer.
> 
> ==========
> 
> However on both Linux and Darwin that I tested on, this works exactly as
> expected (the stack is made executable by the trampoline machinery) and the
> test case executes fine.
> 
> Please could folks who saw an issue;
> 1. repeat the tests with the same conditions as above
> 2. report their platform results

% gfcx -o z y.f90 -fdump-tree-optimized && ./z
/usr/local/bin/ld: warning: /tmp/ccVWAwWh.o: requires executable stack (because
the .note.GNU-stack section is executable)

Looking at the dump, I see the same thing
  <bb 2> :
  FRAME.3.FRAME_BASE.PARENT = 0B;
  __builtin_init_trampoline (&FRAME.3.test, test, &FRAME.3);
  _5 = __builtin_adjust_trampoline (&FRAME.3.test);
  _6 = (logical(kind=4) (*<T69b>) (void)) _5;
  test.1_1 = _6;
  test.2 = test.1_1;
  test_description = new_test_description (&test.2);
  test_description ={v} {CLOBBER(eos)};
  return;

If I add -save-temps to the command line, the last few lines of z-y.s is

% tail z-y.s 
options.0.1:
        .long   10308
        .long   16383
        .long   0
        .long   0
        .long   1
        .long   0
        .long   31
        .ident  "GCC: (GNU) 15.0.0 20241024 (experimental)"
        .section        .note.GNU-stack,"x",@progbits

Reply via email to