| /* The purpose of this test is to check if the attributes of the clone |
| correctly shadow the parent function. In this case, function "dispatch" |
| is cloned but is a static function. The other file, "mversn10a.C" also |
| has a dispatch function that is cloned. So, if the attributes of the |
| clone are not correct the linker will complain. */ |
| |
| /* { dg-do run } */ |
| /* { dg-additional-sources "mversn10a.C" } */ |
| /* { dg-options "-O2 -fclone-hot-version-paths -fdump-tree-optimized" } */ |
| |
| static int __attribute__ ((version_selector)) |
| featureTest () |
| { |
| return 1; |
| } |
| |
| static int foo () |
| { |
| return 0; |
| } |
| |
| static int bar () |
| { |
| return 1; |
| } |
| |
| static int __attribute__ ((noinline)) |
| dispatch () |
| { |
| __builtin_dispatch (featureTest, (void *)foo, (void *)bar); |
| return 0; |
| } |
| |
| int |
| fn1 () |
| { |
| for (int i = 0; i < 1000; i++) |
| dispatch (); |
| return 0; |
| } |
| |
| extern int fn2 (); |
| |
| int __attribute__ ((hot)) |
| main () |
| { |
| fn1 (); |
| fn2 (); |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump "dispatchv\.clone\.0" "optimized" } } */ |
| /* { dg-final { scan-tree-dump "dispatchv\.clone\.1" "optimized" } } */ |
| /* { dg-final { cleanup-tree-dump "optimized" } } */ |