// dwp_test_2.cc -- a test case for dwp // Copyright (C) 2012-2019 Free Software Foundation, Inc. // Written by Cary Coutant . // 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. // Adapted from two_file_test_2.cc. #include "dwp_test.h" // 1 Code in file 1 calls code in file 2. int C1::t1_2() { return 123; } bool C1::t1a() { return t1_2() == 123; } // 2 Code in file 1 refers to global data in file 2. int v2 = 456; // 3 Code in file 1 referes to common symbol in file 2. This is // initialized at runtime to 789. int v3; // 4 Code in file 1 refers to offset within global data in file 2. char v4[] = "Hello, world"; // 5 Code in file 1 refers to offset within common symbol in file 2. // This is initialized at runtime to a copy of v4. char v5[13]; // 6 Data in file 1 refers to global data in file 2. This reuses v2. // 7 Data in file 1 refers to common symbol in file 2. This reuses v3. // 8 Data in file 1 refers to offset within global data in file 2. // This reuses v4. // 9 Data in file 1 refers to offset within common symbol in file 2. // This reuses v5. // 10 Data in file 1 refers to function in file 2. int f10() { return 135; } // 11 Pass function pointer from file 1 to file 2. int f11b(int (*pfn)()) { return (*pfn)(); } // 12 Compare address of function for equality in both files. bool (*C3::f4())() { return &t12; } // 13 Compare address of inline function for equality in both files. void (*f13())() { return &f13i; } // 14 Compare string constants in file 1 and file 2. const char* f14() { return TEST_STRING_CONSTANT; } // 15 Compare wide string constants in file 1 and file 2. const wchar_t* f15() { return TEST_WIDE_STRING_CONSTANT; } // 17 File 1 checks array of string constants defined in file 2. const char* t17data[T17_COUNT] = { "a", "b", "c", "d", "e" }; // 18 File 1 checks string constants referenced directly in file 2. const char* f18(int i) { switch (i) { case 0: return "a"; case 1: return "b"; case 2: return "c"; case 3: return "d"; case 4: return "e"; default: return 0; } }