Skip to content

Commit 4bc4bf5

Browse files
committed
Fix calls to complex-valued functions via procedure pointers.
1 parent 524d3eb commit 4bc4bf5

File tree

1 file changed

+6
-29
lines changed

1 file changed

+6
-29
lines changed

tools/flang2/flang2exe/exp_rte.c

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3013,14 +3013,14 @@ exp_call(ILM_OP opc, ILM *ilmp, int curilm)
30133013
case IM_CDFUNCA:
30143014
i = 4;
30153015
share_cfunc:
3016+
ilm1 = ILM_OPND(ilmp, i);
3017+
dtype = IILM_OPND(ilm1, 2);
3018+
if (IILM_OPC(ilm1) == IM_FARG || IILM_OPC(ilm1) == IM_FARGF)
3019+
ilm1 = IILM_OPND(ilm1, 1);
3020+
cfunc = ILM_RESULT(ilm1);
3021+
cfunc_nme = NME_OF(ilm1);
30163022
if (CFUNCG(exp_call_sym) || (funcptr_flags & FUNCPTR_BINDC) ||
30173023
CMPLXFUNC_C) {
3018-
ilm1 = ILM_OPND(ilmp, i);
3019-
dtype = IILM_OPND(ilm1, 2);
3020-
if (IILM_OPC(ilm1) == IM_FARG || IILM_OPC(ilm1) == IM_FARGF)
3021-
ilm1 = IILM_OPND(ilm1, 1);
3022-
cfunc = ILM_RESULT(ilm1);
3023-
cfunc_nme = NME_OF(ilm1);
30243024
ADDRTKNP(IILM_OPND(ilm1, 1), 1);
30253025
nargs--;
30263026
if (opc == IM_CFUNCA || opc == IM_CDFUNCA) {
@@ -3035,29 +3035,6 @@ exp_call(ILM_OP opc, ILM *ilmp, int curilm)
30353035
garg_ili[0].dtype = dtype;
30363036
garg_ili[0].nme = cfunc_nme;
30373037
}
3038-
break;
3039-
}
3040-
if ((funcptr_flags & FUNCPTR_BINDC)) {
3041-
ilm1 = ILM_OPND(ilmp, 4);
3042-
} else {
3043-
ilm1 = ILM_OPND(ilmp, 3);
3044-
}
3045-
dtype = IILM_OPND(ilm1, 2);
3046-
if (IILM_OPC(ilm1) == IM_FARG)
3047-
ilm1 = IILM_OPND(ilm1, 1);
3048-
else if (IILM_OPC(ilm1) == IM_FARGF)
3049-
ilm1 = IILM_OPND(ilm1, 1);
3050-
cfunc = ILM_RESULT(ilm1);
3051-
cfunc_nme = NME_OF(ilm1);
3052-
if ((funcptr_flags & FUNCPTR_BINDC)) {
3053-
i = 4; /* ilm pointer to first arg */
3054-
if (XBIT(121, 0x800)) {
3055-
garg_ili[0].ilix = cfunc;
3056-
garg_ili[0].dtype = dtype;
3057-
garg_ili[0].nme = cfunc_nme;
3058-
}
3059-
} else {
3060-
i = 3; /* ilm pointer to first arg */
30613038
}
30623039
break;
30633040
case IM_CHVFUNCA:

0 commit comments

Comments
 (0)