// icf_virtual_function_folding_test.cc -- a test case for gold // Copyright (C) 2010-2020 Free Software Foundation, Inc. // Written by Sriraman Tallam <tmsriram@google.com>. // This file is part of gold. // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, // MA 02110-1301, USA. // Foo::fn1 is folded into fn2 with ICF. Since this file is linked as a // position independent executable, a dynamic reloc is needed // for the virtual call fn1 entry in the vtable. This test makes sure // the call to Foo::fn1 works correctly after the folding. int fn2(void *) { return 0xA; } namespace { class Bar { public: virtual ~Bar() { } virtual int fn1(); }; int Bar::fn1() { return 123; } class Foo : public Bar { virtual int fn1(); }; int Foo::fn1() { return 0xA; } Bar* get() { Bar *f = new Foo(); return f; } } // end of anonymous namespace. int main() { Bar *f = get(); f->fn1(); return 0; } |