1/* PR 41750 - IPA-SRA used to pass hash->sgot by value rather than by
2   reference.  */
3
4struct bfd_link_hash_table
5{
6  int hash;
7};
8
9struct foo_link_hash_table
10{
11  struct bfd_link_hash_table root;
12  int *dynobj;
13  int *sgot;
14};
15
16struct foo_link_info
17{
18  struct foo_link_hash_table *hash;
19};
20
21extern void abort (void);
22
23int __attribute__((noinline))
24foo_create_got_section (int *abfd, struct foo_link_info *info)
25{
26  info->hash->sgot = abfd;
27  return 1;
28}
29
30static int *
31get_got (int *abfd, struct foo_link_info *info,
32	 struct foo_link_hash_table *hash)
33{
34  int *got;
35  int *dynobj;
36
37  got = hash->sgot;
38  if (!got)
39    {
40      dynobj = hash->dynobj;
41      if (!dynobj)
42	hash->dynobj = dynobj = abfd;
43      if (!foo_create_got_section (dynobj, info))
44	return 0;
45      got = hash->sgot;
46    }
47  return got;
48}
49
50int * __attribute__((noinline,noclone))
51elf64_ia64_check_relocs (int *abfd, struct foo_link_info *info)
52{
53  return get_got (abfd, info, info->hash);
54}
55
56struct foo_link_info link_info;
57struct foo_link_hash_table hash;
58int abfd;
59
60int
61main ()
62{
63  link_info.hash = &hash;
64  if (elf64_ia64_check_relocs (&abfd, &link_info) != &abfd)
65    abort ();
66  return 0;
67}
68
69