1 // dwp_test_1.cc -- a test case for dwp 2 3 // Copyright (C) 2012-2014 Free Software Foundation, Inc. 4 // Written by Cary Coutant <ccoutant (at) google.com>. 5 6 // This file is part of gold. 7 8 // This program is free software; you can redistribute it and/or modify 9 // it under the terms of the GNU General Public License as published by 10 // the Free Software Foundation; either version 3 of the License, or 11 // (at your option) any later version. 12 13 // This program is distributed in the hope that it will be useful, 14 // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 // GNU General Public License for more details. 17 18 // You should have received a copy of the GNU General Public License 19 // along with this program; if not, write to the Free Software 20 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 21 // MA 02110-1301, USA. 22 23 // Adapted from two_file_test_1.cc. 24 25 #include "dwp_test.h" 26 27 // 1 Code in file 1 calls code in file 2. 28 29 bool 30 C1::testcase1() 31 { 32 return t1_2() == 123; 33 } 34 35 // 2 Code in file 1 refers to global data in file 2. 36 37 bool 38 C1::testcase2() 39 { 40 return v2 == 456; 41 } 42 43 // 3 Code in file 1 referes to common symbol in file 2. 44 45 bool 46 C1::testcase3() 47 { 48 return v3 == 789; 49 } 50 51 // 4 Code in file 1 refers to offset within global data in file 2. 52 53 bool 54 C1::testcase4() 55 { 56 return v4[5] == ','; 57 } 58 59 // 5 Code in file 1 refers to offset within common symbol in file 2. 60 61 bool 62 C2::testcase1() 63 { 64 return v5[7] == 'w'; 65 } 66 67 // 6 Data in file 1 refers to global data in file 2. 68 69 int* p6 = &v2; 70 71 bool 72 C2::testcase2() 73 { 74 return *p6 == 456; 75 } 76 77 // 7 Data in file 1 refers to common symbol in file 2. 78 79 int* p7 = &v3; 80 81 bool 82 C2::testcase3() 83 { 84 return *p7 == 789; 85 } 86 87 // 8 Data in file 1 refers to offset within global data in file 2. 88 89 char* p8 = &v4[6]; 90 91 bool 92 C2::testcase4() 93 { 94 return *p8 == ' '; 95 } 96 97 // 9 Data in file 1 refers to offset within common symbol in file 2. 98 99 char* p9 = &v5[8]; 100 101 bool 102 C3::testcase1() 103 { 104 return *p9 == 'o'; 105 } 106 107 // 10 Data in file 1 refers to function in file 2. 108 109 int (*pfn)() = &f10; 110 111 bool 112 C3::testcase2() 113 { 114 return (*pfn)() == 135; 115 } 116 117 // 11 Pass function pointer from file 1 to file 2. 118 119 int 120 f11a() 121 { 122 return 246; 123 } 124 125 bool 126 C3::testcase3() 127 { 128 return f11b(&f11a) == 246; 129 } 130 131 // 12 Compare address of function for equality in both files. 132 133 bool 134 t12() 135 { 136 return &t12 == c3.f4(); 137 } 138 139 // 13 Compare address of inline function for equality in both files. 140 141 bool 142 t13() 143 { 144 return &f13i == f13(); 145 } 146 147 // 14 Compare string constants in file 1 and file 2. 148 149 bool 150 t14() 151 { 152 const char* s1 = TEST_STRING_CONSTANT; 153 const char* s2 = f14(); 154 while (*s1 != '\0') 155 if (*s1++ != *s2++) 156 return false; 157 return *s2 == '\0'; 158 } 159 160 // 15 Compare wide string constants in file 1 and file 2. 161 162 bool 163 t15() 164 { 165 const wchar_t* s1 = TEST_WIDE_STRING_CONSTANT; 166 const wchar_t* s2 = f15(); 167 while (*s1 != '\0') 168 if (*s1++ != *s2++) 169 return false; 170 return *s2 == '\0'; 171 } 172 173 // 16 Call a function directly after its address has been taken. 174 175 bool 176 t16() 177 { 178 return f10() == 135; 179 } 180 181 // 17 File 1 checks array of string constants defined in file 2. 182 183 bool 184 t17() 185 { 186 char c = 'a'; 187 for (int i = 0; i < T17_COUNT; ++i) 188 { 189 if (t17data[i][0] != c || t17data[i][1] != '\0') 190 return false; 191 ++c; 192 } 193 return true; 194 } 195 196 // 18 File 1 checks string constants referenced in code in file 2. 197 198 bool 199 t18() 200 { 201 char c = 'a'; 202 for (int i = 0; i < T17_COUNT; ++i) 203 { 204 const char* s = f18(i); 205 if (s[0] != c || s[1] != '\0') 206 return false; 207 ++c; 208 } 209 return true; 210 } 211