(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
funcorder.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -funit-at-a-time" } */
       3  /* { dg-final { scan-assembler-not "link_error" } } */
       4  /*  In unit-at-time the functions should be assembled in order
       5      e q t main, so we realize that they are pure.  */
       6   
       7  void link_error (void);
       8  static int mem;
       9  static int e(void) __attribute__ ((noinline));
      10  static int q(void) __attribute__ ((noinline));
      11  static int t(void) __attribute__ ((noinline));
      12  int
      13  main()
      14  {
      15  	return t();
      16  }
      17  static int t()
      18  {
      19  	int r,e;
      20  	if (mem)
      21  		t();
      22  	e=mem;
      23  	r=q();
      24  	if (e!=mem)
      25  		link_error();
      26  	return r;
      27  }
      28  static int e()
      29  {
      30  	return 0;
      31  }
      32  static int q()
      33  {
      34  	int t=mem,r;
      35  	r=e();
      36  	if (t!=mem)
      37  		link_error();
      38  	return r;
      39  }