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*1424dfb3Schristosint kept_func_1() 44*1424dfb3Schristos { 45*1424dfb3Schristos return 1; 46*1424dfb3Schristos } 47*1424dfb3Schristos kept_func_2()48*1424dfb3Schristosint kept_func_2() 49*1424dfb3Schristos { 50*1424dfb3Schristos return 1; 51*1424dfb3Schristos } 52*1424dfb3Schristos kept_func_3()53*1424dfb3Schristosint kept_func_3() 54*1424dfb3Schristos { 55*1424dfb3Schristos return 1; 56*1424dfb3Schristos } 57*1424dfb3Schristos main()58*1424dfb3Schristosint main() 59*1424dfb3Schristos { 60*1424dfb3Schristos int (*p)() = kept_func_3; 61*1424dfb3Schristos p(); 62*1424dfb3Schristos return 0; 63*1424dfb3Schristos } 64