aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.old-deja/g++.benjamin/tem06.C
blob: 3233e0e964d5b687a2cbfefe6c15068dfcabe656 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// { dg-do run  }
// 980945 bkoz
// test for correct operators at link time

/*
/tmp/cca211431.o: In function `void blah<foo<int> >(foo<int> const &)':
/tmp/cca211431.o(.void gnu.linkonce.t.blah<foo<int> >(foo<int> const &)+0x1e): undefined reference to `void x<int>(int const &)'
*/

template<class T>
class foo {
public:
  foo () {}
  friend void x (const T &) { }
};

void x(const int &);

template<class T>
void blah (const T &) {
  T y;
  x (4);
}

int main () {
  const foo<int> v;
  blah (v);
}

/*
fno-exceptions -fno-rtti

1.98r1.o:
00000000 W __t3foo1Zi
00000000 W blah__H1Zt3foo1Zi_RCX01_v
00000000 t gcc2_compiled.
00000000 T main
         U x__H1Zi_RCX01_v

1.egcs.o:
00000000 W __t3foo1Zi
00000000 W blah__H1Zt3foo1Zi_RCX01_v
00000000 t gcc2_compiled.
00000000 T main
00000000 W x__FRCi


the reason this goes away at -O is because the U or W function is
elided completely.  

*/