1/* { dg-do compile } */
2/* { dg-require-weak "" } */
3/* { dg-options "-fno-common" } */
4
5/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1a" } } */
6/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1b" } } */
7/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1c" } } */
8/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?ffoo1d" } } */
9/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1e" } } */
10
11/* test function addresses with #pragma weak */
12
13#pragma weak ffoo1a
14extern void * ffoo1a (void);
15void * foo1a (void)
16{
17  return (void *)ffoo1a;
18}
19
20extern void * ffoo1b (void);
21#pragma weak ffoo1b
22void * foo1b (void)
23{
24  return (void *)ffoo1b;
25}
26
27extern void * ffoo1c (void);  /* { dg-warning "applying #pragma weak" "applying #pragma weak" } */
28void * foo1c (void)
29{
30  return (void *)ffoo1c;
31}
32#pragma weak ffoo1c
33
34
35int ffoo1d (void);
36#pragma weak ffoo1d
37
38
39extern void * ffoo1e (void);
40#pragma weak ffoo1e
41void * foo1e (void)
42{
43  if (ffoo1e)
44    ffoo1e ();
45  return 0;
46}
47
48