Update copyright to LGPL on all files
[dyninst.git] / testsuite / src / dyninst / test1_27_mutatee.c
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31 #include "mutatee_util.h"
32
33 /* Externally accessed function prototypes.  These must have globally unique
34  * names.  I suggest following the pattern <testname>_<function>
35  */
36
37 /* Global variables accessed by the mutator.  These must have globally unique
38  * names.
39  */
40
41 struct struct26_1 {
42     int field1;
43     int field2;
44 };
45
46 struct struct26_2 {
47     int field1;
48     int field2;
49     int field3[10];
50     struct struct26_1 field4;
51 };
52 #if !defined(os_windows_test) 
53 /* make GCC emit type information correctly */
54 struct test1_27_type1_t {
55     /* void *field27_11; */
56     int field27_11;
57     float field27_12;
58 };
59
60 typedef struct test1_27_type1_t test1_27_type1;
61
62 struct test1_27_type2_t {
63     /* void *field27_21; */
64     int field27_21;
65     float field27_22;
66 } ;
67 typedef struct test1_27_type2_t test1_27_type2;
68
69 struct test1_27_type3_t {
70     int field3[10];
71     struct struct26_2 field4;
72 };
73
74 typedef struct test1_27_type3_t test1_27_type3;
75
76 struct test1_27_type4_t {
77     int field3[10];
78     struct struct26_2 field4;
79 } ;
80
81 typedef struct test1_27_type4_t test1_27_type4;
82 #else 
83 /* Make VC2003 emit type information correctly */
84 typedef struct {
85     /* void *field27_11; */
86     int field27_11;
87     float field27_12;
88 } test1_27_type1;
89
90 typedef struct {
91     /* void *field27_21; */
92     int field27_21;
93     float field27_22;
94 } test1_27_type2;
95
96 typedef struct {
97     int field3[10];
98     struct struct26_2 field4;
99 } test1_27_type3;
100
101 typedef struct {
102     int field3[10];
103     struct struct26_2 field4;
104 } test1_27_type4;
105 #endif
106 /* need this variables or some compilers (AIX xlc) will removed unused
107    typedefs - jkh 10/13/99 */
108 test1_27_type1 test1_27_dummy1;
109 test1_27_type2 test1_27_dummy2;
110 test1_27_type3 test1_27_dummy3;
111 test1_27_type4 test1_27_dummy4;
112
113 int test1_27_globalVariable1 = -1;
114
115 /* Note for future reference: -Wl,-bgcbypass:3 is NECESSARY for
116    compilation (gcc) on AIX. Damn efficient linkers. */
117 int test1_27_globalVariable5[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
118 int test1_27_globalVariable6[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
119 float test1_27_globalVariable7[10] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0,
120                                 6.0, 7.0, 8.0, 9.0};
121 float test1_27_globalVariable8[12];
122
123 /* Internally used function prototypes.  These should be declared with the
124  * keyword static so they don't interfere with other mutatees in the group.
125  */
126
127 /* Global variables used internally by the mutatee.  These should be declared
128  * with the keyword static so they don't interfere with other mutatees in the
129  * group.
130  */
131
132 /* Function definitions follow */
133
134 /*
135  * Test #27 - type compatibility
136  */
137 int test1_27_mutatee() {
138   int retval, passed;
139
140 #if !defined(sparc_sun_solaris2_4_test) \
141  && !defined(rs6000_ibm_aix4_1_test) \
142  && !defined(alpha_dec_osf4_0_test) \
143  && !defined(i386_unknown_linux2_0_test) \
144  && !defined(x86_64_unknown_linux2_4_test) /* Blind duplication - Ray */ \
145  && !defined(i386_unknown_solaris2_5_test) \
146  && !defined(i386_unknown_nt4_0_test) \
147  && !defined(ia64_unknown_linux2_4_test)
148
149     logerror("Skipped test #27 (type compatibility)\n");
150     logerror("\t- not implemented on this platform\n");
151     test_passes(testname);
152     retval = 0; /* Test "passed" */
153 #else
154     passed = (test1_27_globalVariable1 == 1);
155    
156     if (passed) {
157       logerror("Passed test #27 (type compatibility)\n");
158       test_passes(testname);
159       retval = 0; /* Test passed */
160     } else {
161       retval = -1; /* Test failed */
162     }
163 #endif
164     return retval;
165 }