@@ -85,6 +85,7 @@ llvm_compile_expr(ExprState *state)
85
85
/* state itself */
86
86
LLVMValueRef v_state ;
87
87
LLVMValueRef v_econtext ;
88
+ LLVMValueRef v_parent ;
88
89
89
90
/* returnvalue */
90
91
LLVMValueRef v_isnullp ;
@@ -173,6 +174,9 @@ llvm_compile_expr(ExprState *state)
173
174
v_tmpisnullp = LLVMBuildStructGEP (b , v_state ,
174
175
FIELDNO_EXPRSTATE_RESNULL ,
175
176
"v.state.resnull" );
177
+ v_parent = l_load_struct_gep (b , v_state ,
178
+ FIELDNO_EXPRSTATE_PARENT ,
179
+ "v.state.parent" );
176
180
177
181
/* build global slots */
178
182
v_scanslot = l_load_struct_gep (b , v_econtext ,
@@ -1989,7 +1993,7 @@ llvm_compile_expr(ExprState *state)
1989
1993
LLVMValueRef v_tmpcontext ;
1990
1994
LLVMValueRef v_oldcontext ;
1991
1995
1992
- aggstate = op -> d . agg_deserialize . aggstate ;
1996
+ aggstate = castNode ( AggState , state -> parent ) ;
1993
1997
fcinfo = op -> d .agg_deserialize .fcinfo_data ;
1994
1998
1995
1999
v_tmpcontext =
@@ -2078,7 +2082,6 @@ llvm_compile_expr(ExprState *state)
2078
2082
2079
2083
case EEOP_AGG_INIT_TRANS :
2080
2084
{
2081
- AggState * aggstate ;
2082
2085
AggStatePerTrans pertrans ;
2083
2086
2084
2087
LLVMValueRef v_aggstatep ;
@@ -2095,11 +2098,10 @@ llvm_compile_expr(ExprState *state)
2095
2098
2096
2099
LLVMBasicBlockRef b_init ;
2097
2100
2098
- aggstate = op -> d .agg_init_trans .aggstate ;
2099
2101
pertrans = op -> d .agg_init_trans .pertrans ;
2100
2102
2101
- v_aggstatep = l_ptr_const ( aggstate ,
2102
- l_ptr (StructAggState ));
2103
+ v_aggstatep =
2104
+ LLVMBuildBitCast ( b , v_parent , l_ptr (StructAggState ), "" );
2103
2105
v_pertransp = l_ptr_const (pertrans ,
2104
2106
l_ptr (StructAggStatePerTransData ));
2105
2107
@@ -2176,7 +2178,6 @@ llvm_compile_expr(ExprState *state)
2176
2178
2177
2179
case EEOP_AGG_STRICT_TRANS_CHECK :
2178
2180
{
2179
- AggState * aggstate ;
2180
2181
LLVMValueRef v_setoff ,
2181
2182
v_transno ;
2182
2183
@@ -2188,8 +2189,8 @@ llvm_compile_expr(ExprState *state)
2188
2189
2189
2190
int jumpnull = op -> d .agg_strict_trans_check .jumpnull ;
2190
2191
2191
- aggstate = op -> d . agg_strict_trans_check . aggstate ;
2192
- v_aggstatep = l_ptr_const ( aggstate , l_ptr (StructAggState ));
2192
+ v_aggstatep =
2193
+ LLVMBuildBitCast ( b , v_parent , l_ptr (StructAggState ), "" );
2193
2194
2194
2195
/*
2195
2196
* pergroup = &aggstate->all_pergroups
@@ -2256,13 +2257,13 @@ llvm_compile_expr(ExprState *state)
2256
2257
LLVMValueRef v_tmpcontext ;
2257
2258
LLVMValueRef v_oldcontext ;
2258
2259
2259
- aggstate = op -> d . agg_trans . aggstate ;
2260
+ aggstate = castNode ( AggState , state -> parent ) ;
2260
2261
pertrans = op -> d .agg_trans .pertrans ;
2261
2262
2262
2263
fcinfo = pertrans -> transfn_fcinfo ;
2263
2264
2264
- v_aggstatep = l_ptr_const ( aggstate ,
2265
- l_ptr (StructAggState ));
2265
+ v_aggstatep =
2266
+ LLVMBuildBitCast ( b , v_parent , l_ptr (StructAggState ), "" );
2266
2267
v_pertransp = l_ptr_const (pertrans ,
2267
2268
l_ptr (StructAggStatePerTransData ));
2268
2269
0 commit comments