/* PR c/119311 */ /* { dg-do compile { target musttail } } */ /* { dg-options "-O2 -fdump-tree-optimized" } */ /* { dg-final { scan-tree-dump-times " \[^\n\r]* = bar \\\(\[^\n\r]*\\\); \\\[tail call\\\] \\\[must tail call\\\]" 1 "optimized" } } */ /* { dg-final { scan-tree-dump-times " \[^\n\r]* = baz \\\(\[^\n\r]*\\\); \\\[tail call\\\] \\\[must tail call\\\]" 1 "optimized" } } */ /* { dg-final { scan-tree-dump-not " (?:bar|baz) \\\(\[^\n\r]*\\\); \\\[tail call\\\]" "optimized" } } */ [[gnu::noipa]] int bar (int x, int y) { return x + y; } [[gnu::noipa]] int baz (int x, int y) { return x * y; } int foo (int a, int b) { if (a > b) [[gnu::musttail]] return bar (a - b, b); else [[gnu::musttail]] return baz (a, b - a); }