| // Test to verify that attributes on distinct overloads of a function |
| // with the same name are properly looked up and applied. |
| // { dg-do compile } |
| // { dg-options "-Wall" } |
| |
| int |
| foo (int); |
| |
| int __attribute__ ((noreturn)) |
| foo (int, int); |
| |
| int __attribute__ ((warn_unused_result)) |
| foo (int, int, int); |
| |
| int call_foo_1 () |
| { |
| foo (1); |
| } // { dg-warning "\\\[-Wreturn-type]" } |
| |
| int call_foo_2 () |
| { |
| foo (1, 2); |
| } |
| |
| int call_foo_3 () |
| { |
| foo (1, 2, 3); // { dg-warning "\\\[-Wunused-result]" } |
| } // { dg-warning "\\\[-Wreturn-type]" } |
| |
| int call_foo_4 () |
| { |
| // Make sure an error doesn't trigger bogus warnings or an ICE. |
| foo (1, 2, 3, 4); // { dg-error "no matching function" } |
| return 0; |
| } |