Mercurial > hg > truffle
annotate src/share/vm/c1/c1_ValueType.cpp @ 1721:413ad0331a0c
6977924: Changes for 6975078 produce build error with certain gcc versions
Summary: The changes introduced for 6975078 assign badHeapOopVal to the _allocation field in the ResourceObj class. In 32 bit linux builds with certain versions of gcc this assignment will be flagged as an error while compiling allocation.cpp. In 32 bit builds the constant value badHeapOopVal (which is cast to an intptr_t) is negative. The _allocation field is typed as an unsigned intptr_t and gcc catches this as an error.
Reviewed-by: jcoomes, ysr, phh
author | johnc |
---|---|
date | Wed, 18 Aug 2010 10:59:06 -0700 |
parents | b812ff5abc73 |
children | f95d63e2154a |
rev | line source |
---|---|
0 | 1 /* |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
989
diff
changeset
|
2 * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
989
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
989
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
989
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
25 # include "incls/_precompiled.incl" | |
26 # include "incls/_c1_ValueType.cpp.incl" | |
27 | |
28 | |
29 // predefined types | |
30 VoidType* voidType = NULL; | |
31 IntType* intType = NULL; | |
32 LongType* longType = NULL; | |
33 FloatType* floatType = NULL; | |
34 DoubleType* doubleType = NULL; | |
35 ObjectType* objectType = NULL; | |
36 ArrayType* arrayType = NULL; | |
37 InstanceType* instanceType = NULL; | |
38 ClassType* classType = NULL; | |
39 AddressType* addressType = NULL; | |
40 IllegalType* illegalType = NULL; | |
41 | |
42 | |
43 // predefined constants | |
44 IntConstant* intZero = NULL; | |
45 IntConstant* intOne = NULL; | |
46 ObjectConstant* objectNull = NULL; | |
47 | |
48 | |
1584 | 49 void ValueType::initialize(Arena* arena) { |
0 | 50 // Note: Must initialize all types for each compilation |
51 // as they are allocated within a ResourceMark! | |
52 | |
53 // types | |
1584 | 54 voidType = new (arena) VoidType(); |
55 intType = new (arena) IntType(); | |
56 longType = new (arena) LongType(); | |
57 floatType = new (arena) FloatType(); | |
58 doubleType = new (arena) DoubleType(); | |
59 objectType = new (arena) ObjectType(); | |
60 arrayType = new (arena) ArrayType(); | |
61 instanceType = new (arena) InstanceType(); | |
62 classType = new (arena) ClassType(); | |
63 addressType = new (arena) AddressType(); | |
64 illegalType = new (arena) IllegalType(); | |
0 | 65 |
1584 | 66 intZero = new (arena) IntConstant(0); |
67 intOne = new (arena) IntConstant(1); | |
68 objectNull = new (arena) ObjectConstant(ciNullObject::make()); | |
0 | 69 }; |
70 | |
71 | |
72 ValueType* ValueType::meet(ValueType* y) const { | |
73 // incomplete & conservative solution for now - fix this! | |
74 assert(tag() == y->tag(), "types must match"); | |
75 return base(); | |
76 } | |
77 | |
78 | |
79 ValueType* ValueType::join(ValueType* y) const { | |
80 Unimplemented(); | |
81 return NULL; | |
82 } | |
83 | |
84 | |
85 | |
86 jobject ObjectType::encoding() const { | |
87 assert(is_constant(), "must be"); | |
989 | 88 return constant_value()->constant_encoding(); |
0 | 89 } |
90 | |
91 bool ObjectType::is_loaded() const { | |
92 assert(is_constant(), "must be"); | |
93 return constant_value()->is_loaded(); | |
94 } | |
95 | |
96 ciObject* ObjectConstant::constant_value() const { return _value; } | |
97 ciObject* ArrayConstant::constant_value() const { return _value; } | |
98 ciObject* InstanceConstant::constant_value() const { return _value; } | |
99 ciObject* ClassConstant::constant_value() const { return _value; } | |
100 | |
101 | |
102 ValueType* as_ValueType(BasicType type) { | |
103 switch (type) { | |
104 case T_VOID : return voidType; | |
105 case T_BYTE : // fall through | |
106 case T_CHAR : // fall through | |
107 case T_SHORT : // fall through | |
108 case T_BOOLEAN: // fall through | |
109 case T_INT : return intType; | |
110 case T_LONG : return longType; | |
111 case T_FLOAT : return floatType; | |
112 case T_DOUBLE : return doubleType; | |
113 case T_ARRAY : return arrayType; | |
114 case T_OBJECT : return objectType; | |
115 case T_ADDRESS: return addressType; | |
116 case T_ILLEGAL: return illegalType; | |
117 } | |
118 ShouldNotReachHere(); | |
119 return illegalType; | |
120 } | |
121 | |
122 | |
123 ValueType* as_ValueType(ciConstant value) { | |
124 switch (value.basic_type()) { | |
125 case T_BYTE : // fall through | |
126 case T_CHAR : // fall through | |
127 case T_SHORT : // fall through | |
128 case T_BOOLEAN: // fall through | |
129 case T_INT : return new IntConstant (value.as_int ()); | |
130 case T_LONG : return new LongConstant (value.as_long ()); | |
131 case T_FLOAT : return new FloatConstant (value.as_float ()); | |
132 case T_DOUBLE : return new DoubleConstant(value.as_double()); | |
133 case T_ARRAY : // fall through (ciConstant doesn't have an array accessor) | |
134 case T_OBJECT : return new ObjectConstant(value.as_object()); | |
135 } | |
136 ShouldNotReachHere(); | |
137 return illegalType; | |
138 } | |
139 | |
140 | |
141 BasicType as_BasicType(ValueType* type) { | |
142 switch (type->tag()) { | |
143 case voidTag: return T_VOID; | |
144 case intTag: return T_INT; | |
145 case longTag: return T_LONG; | |
146 case floatTag: return T_FLOAT; | |
147 case doubleTag: return T_DOUBLE; | |
148 case objectTag: return T_OBJECT; | |
149 case addressTag: return T_ADDRESS; | |
150 case illegalTag: return T_ILLEGAL; | |
151 } | |
152 ShouldNotReachHere(); | |
153 return T_ILLEGAL; | |
154 } |