Fix compile errors with GCC 4.2.
[deliverable/binutils-gdb.git] / gold / testsuite / two_file_test_1.cc
CommitLineData
3bd52c28
ILT
1// two_file_test_1.cc -- a two file test case for gold, file 1 of 2
2
2571583a 3// Copyright (C) 2006-2017 Free Software Foundation, Inc.
3bd52c28
ILT
4// Written by Ian Lance Taylor <iant@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// This tests references between files. This is file 1, and
24// two_file_test_2.cc is file 2. We test in several different ways:
25
26// Files 1 and 2 linked together in executable.
27// File 1 in executable, file 2 in shared library.
28// File 1 in shared library, file 2 in executable.
29// Files 1 and 2 linked together in shared library.
30// Files 1 and 2 in different shared libraries.
31
32// We test the following cases.
33
34// 1 Code in file 1 calls code in file 2.
35// 2 Code in file 1 refers to global data in file 2.
36// 3 Code in file 1 referes to common symbol in file 2.
37// 4 Code in file 1 refers to offset within global data in file 2.
38// 5 Code in file 1 refers to offset within common symbol in file 2.
39// 6 Data in file 1 refers to global data in file 2.
40// 7 Data in file 1 refers to common symbol in file 2.
41// 8 Data in file 1 refers to offset within global data in file 2.
42// 9 Data in file 1 refers to offset within common symbol in file 2.
43// 10 Data in file 1 refers to function in file 2.
44// 11 Pass function pointer from file 1 to file 2.
45// 12 Compare address of function for equality in both files.
46// 13 Compare address of inline function for equality in both files.
f958d5fc 47// 14 Compare string constants in file 1 and file 2.
03e8f2b2
ILT
48// 15 Compare wide string constants in file 1 and file 2.
49// 16 Call a function directly after its address has been taken.
d1f003c6 50// 17 File 1 checks array of string constants defined in file 2.
624f8810 51// 18 File 1 checks string constants referenced in code in file 2.
3bd52c28
ILT
52
53#include "two_file_test.h"
54
55// 1 Code in file 1 calls code in file 2.
56
57bool
58t1()
59{
60 return t1_2() == 123;
61}
62
63// 2 Code in file 1 refers to global data in file 2.
64
65bool
66t2()
67{
68 return v2 == 456;
69}
70
71// 3 Code in file 1 referes to common symbol in file 2.
72
73bool
74t3()
75{
76 return v3 == 789;
77}
78
79// 4 Code in file 1 refers to offset within global data in file 2.
80
81bool
82t4()
83{
84 return v4[5] == ',';
85}
86
87// 5 Code in file 1 refers to offset within common symbol in file 2.
88
89bool
90t5()
91{
92 return v5[7] == 'w';
93}
94
95// 6 Data in file 1 refers to global data in file 2.
96
97int* p6 = &v2;
98
99bool
100t6()
101{
102 return *p6 == 456;
103}
104
105// 7 Data in file 1 refers to common symbol in file 2.
106
107int* p7 = &v3;
108
109bool
110t7()
111{
112 return *p7 == 789;
113}
114
115// 8 Data in file 1 refers to offset within global data in file 2.
116
117char* p8 = &v4[6];
118
119bool
120t8()
121{
122 return *p8 == ' ';
123}
124
125// 9 Data in file 1 refers to offset within common symbol in file 2.
126
127char* p9 = &v5[8];
128
129bool
130t9()
131{
132 return *p9 == 'o';
133}
134
135// 10 Data in file 1 refers to function in file 2.
136
137int (*pfn)() = &f10;
138
139bool
140t10()
141{
142 return (*pfn)() == 135;
143}
144
145// 11 Pass function pointer from file 1 to file 2.
146
147int
148f11a()
149{
150 return 246;
151}
152
153bool
154t11()
155{
156 return f11b(&f11a) == 246;
157}
158
159// 12 Compare address of function for equality in both files.
160
161bool
162t12()
163{
164 return &t12 == f12();
165}
166
167// 13 Compare address of inline function for equality in both files.
168
169bool
170t13()
171{
172 return &f13i == f13();
173}
f958d5fc
ILT
174
175// 14 Compare string constants in file 1 and file 2.
176
177bool
178t14()
179{
180 const char* s1 = TEST_STRING_CONSTANT;
181 const char* s2 = f14();
182 while (*s1 != '\0')
183 if (*s1++ != *s2++)
184 return false;
185 return *s2 == '\0';
186}
28ef3179
ILT
187
188// 15 Compare wide string constants in file 1 and file 2.
189
190bool
191t15()
192{
193 const wchar_t* s1 = TEST_WIDE_STRING_CONSTANT;
194 const wchar_t* s2 = f15();
195 while (*s1 != '\0')
196 if (*s1++ != *s2++)
197 return false;
198 return *s2 == '\0';
199}
03e8f2b2
ILT
200
201// 16 Call a function directly after its address has been taken.
202
203bool
204t16()
205{
206 return f10() == 135;
207}
d1f003c6
ILT
208
209// 17 File 1 checks array of string constants defined in file 2.
210
211bool
212t17()
213{
214 char c = 'a';
215 for (int i = 0; i < T17_COUNT; ++i)
216 {
217 if (t17data[i][0] != c || t17data[i][1] != '\0')
218 return false;
219 ++c;
220 }
221 return true;
222}
624f8810
ILT
223
224// 18 File 1 checks string constants referenced in code in file 2.
225
226bool
227t18()
228{
229 char c = 'a';
230 for (int i = 0; i < T17_COUNT; ++i)
231 {
232 const char* s = f18(i);
233 if (s[0] != c || s[1] != '\0')
234 return false;
235 ++c;
236 }
237 return true;
238}
This page took 0.408247 seconds and 4 git commands to generate.