Author: xiaohua_zhang
Date: 2010-09-13 15:57:48 -0400 (Mon, 13 Sep 2010)
New Revision: 3340
Modified:
trunk/osprey/common/com/mtypes.cxx
trunk/osprey/common/com/mtypes.h
trunk/osprey/wgen/wgen_decl.cxx
Log:
Bug 592: Assertion failure in file: osprey/../libspin/gspin-tel.h,
function: gs_tree_value, line: 947
It happens when the initializer list for vector typed variable is empty.
The code used to get the element type from initializer, when it is empty,
the code gets a null pointer access. Now it is changed to use the vector
MTYPE to get its element type.
__attribute__ ((vector_size (sizeof (double) * 4))) double d1 = { 1., 2 };
__attribute__ ((vector_size (sizeof (double) * 4))) double d2 = { };
__attribute__ ((vector_size (sizeof (float) * 4))) float f1 = { 1., 2 };
__attribute__ ((vector_size (sizeof (float) * 4))) float f2 = { };
__attribute__ ((vector_size (sizeof (int) * 4))) int a = { 1, 2 };
__attribute__ ((vector_size (sizeof (int) * 4))) int c = { };
Code Review: JianXin Lai
Modified: trunk/osprey/common/com/mtypes.cxx
===================================================================
--- trunk/osprey/common/com/mtypes.cxx 2010-09-13 06:07:31 UTC (rev 3339)
+++ trunk/osprey/common/com/mtypes.cxx 2010-09-13 19:57:48 UTC (rev 3340)
@@ -482,7 +482,6 @@
return Machine_Prev_Alignment[type];
}
-#if defined(TARG_X8664)
/* ====================================================================
*
* TYPE_ID Mtype_vector_elemtype(TYPE_ID)
@@ -494,6 +493,7 @@
TYPE_ID Mtype_vector_elemtype(TYPE_ID type)
{
switch (type) {
+#if defined(TARG_X8664)
case MTYPE_V32F8:
case MTYPE_V16F8:
return MTYPE_F8;
@@ -526,9 +526,9 @@
case MTYPE_V8I1:
case MTYPE_M8I1:
return MTYPE_I1;
+#endif
default:
return type;
}
}
-#endif
Modified: trunk/osprey/common/com/mtypes.h
===================================================================
--- trunk/osprey/common/com/mtypes.h 2010-09-13 06:07:31 UTC (rev 3339)
+++ trunk/osprey/common/com/mtypes.h 2010-09-13 19:57:48 UTC (rev 3340)
@@ -317,9 +317,7 @@
extern TYPE_ID Mtype_next_alignment( TYPE_ID);
extern TYPE_ID Mtype_prev_alignment( TYPE_ID);
-#if defined (TARG_X8664)
extern TYPE_ID Mtype_vector_elemtype( TYPE_ID);
-#endif
#ifdef __cplusplus
}
Modified: trunk/osprey/wgen/wgen_decl.cxx
===================================================================
--- trunk/osprey/wgen/wgen_decl.cxx 2010-09-13 06:07:31 UTC (rev 3339)
+++ trunk/osprey/wgen/wgen_decl.cxx 2010-09-13 19:57:48 UTC (rev 3340)
@@ -2351,13 +2351,14 @@
init = gs_tree_vector_cst_elts (init_list);
- gs_t size = gs_type_size (gs_tree_type (gs_tree_value (init)));
- Is_True (gs_tree_code (size) == GS_INTEGER_CST,
- ("WGEN_Add_Aggregate_Init_Vector: Vector of variable-sized
units?"));
-
- UINT esize = gs_get_integer_value(size) / BITSPERBYTE;
+ // find the element size from vector mtype
+ TY_IDX vector_type = Get_TY(gs_tree_type(init_list));
+ Is_True (MTYPE_is_vector(TY_mtype(vector_type)),
+ ("WGEN_Add_Aggregate_Init_Vector: invalid vector type"));
+ TYPE_ID elem_mtype = Mtype_vector_elemtype(TY_mtype(vector_type));
+ UINT esize = MTYPE_byte_size(elem_mtype);
UINT nunits = vec_size / esize;
- gs_code_t code = gs_tree_code (gs_tree_value (init));
+ gs_code_t code = MTYPE_is_integral(elem_mtype) ? GS_INTEGER_CST :
GS_REAL_CST;
for (i = 0;
init;
------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
Open64-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel