1*1424dfb3Schristos // icf_safe_test.cc -- a test case for gold
2*1424dfb3Schristos 
3*1424dfb3Schristos // Copyright (C) 2009-2020 Free Software Foundation, Inc.
4*1424dfb3Schristos // Written by Sriraman Tallam <tmsriram@google.com>.
5*1424dfb3Schristos 
6*1424dfb3Schristos // This file is part of gold.
7*1424dfb3Schristos 
8*1424dfb3Schristos // This program is free software; you can redistribute it and/or modify
9*1424dfb3Schristos // it under the terms of the GNU General Public License as published by
10*1424dfb3Schristos // the Free Software Foundation; either version 3 of the License, or
11*1424dfb3Schristos // (at your option) any later version.
12*1424dfb3Schristos 
13*1424dfb3Schristos // This program is distributed in the hope that it will be useful,
14*1424dfb3Schristos // but WITHOUT ANY WARRANTY; without even the implied warranty of
15*1424dfb3Schristos // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*1424dfb3Schristos // GNU General Public License for more details.
17*1424dfb3Schristos 
18*1424dfb3Schristos // You should have received a copy of the GNU General Public License
19*1424dfb3Schristos // along with this program; if not, write to the Free Software
20*1424dfb3Schristos // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21*1424dfb3Schristos // MA 02110-1301, USA.
22*1424dfb3Schristos 
23*1424dfb3Schristos // The goal of this program is to verify if identical code folding
24*1424dfb3Schristos // in safe mode correctly folds only ctors and dtors. kept_func_1 must
25*1424dfb3Schristos // not be folded into kept_func_2 other than for X86 (32 and 64 bit)
26*1424dfb3Schristos // which can use relocation types to determine if function pointers are
27*1424dfb3Schristos // taken.  kept_func_3 should never be folded as its pointer is taken.
28*1424dfb3Schristos // The ctor and dtor of class A must be folded.
29*1424dfb3Schristos 
30*1424dfb3Schristos class A
31*1424dfb3Schristos {
32*1424dfb3Schristos   public:
A()33*1424dfb3Schristos     A()
34*1424dfb3Schristos     {
35*1424dfb3Schristos     }
~A()36*1424dfb3Schristos     ~A()
37*1424dfb3Schristos     {
38*1424dfb3Schristos     }
39*1424dfb3Schristos };
40*1424dfb3Schristos 
41*1424dfb3Schristos A a;
42*1424dfb3Schristos 
kept_func_1()43*1424dfb3Schristos int kept_func_1()
44*1424dfb3Schristos {
45*1424dfb3Schristos   return 1;
46*1424dfb3Schristos }
47*1424dfb3Schristos 
kept_func_2()48*1424dfb3Schristos int kept_func_2()
49*1424dfb3Schristos {
50*1424dfb3Schristos   return 1;
51*1424dfb3Schristos }
52*1424dfb3Schristos 
kept_func_3()53*1424dfb3Schristos int kept_func_3()
54*1424dfb3Schristos {
55*1424dfb3Schristos   return 1;
56*1424dfb3Schristos }
57*1424dfb3Schristos 
main()58*1424dfb3Schristos int main()
59*1424dfb3Schristos {
60*1424dfb3Schristos   int (*p)() = kept_func_3;
61*1424dfb3Schristos   p();
62*1424dfb3Schristos   return 0;
63*1424dfb3Schristos }
64