Hello Sean,
I attached all the source code and Makefile here. The Prolog function* foo* is called by ssa_c.c function, (babel_foo_wrapper) Then at line 57 of* test_pl.pl <http://test_pl.pl>*, it calls function *foo3* through* c wrapper*. The program can never reach line 58 of *test_pl.pl <http://test_pl.pl>*, even though I am sure it successfully return from *foo3*, as well as* babel_c_0* (which is line 63 of* test_c.c*) Yes, I myself also write several Prolog call C, C call prolog code before, and it could work.. That's why I feel so weird this time.. Thank you! Best, Shuai On Thu, Jul 24, 2014 at 2:13 AM, Sean Charles <obji...@gmail.com> wrote: > Hi, > > It would greatly help if you could attach *ALL* source code and the > commands you are using to compile and link. > > I have written C extensions that are called from Prolog and they work just > fine so there must be something in your code that’s not right yet! > > Show us your code and we will try to help! > > Sean. > > > > On 24 Jul 2014, at 03:26, Shuai Wang <wangshuai...@gmail.com> wrote: > > Hello gnu-prolog users, > > > On my 64bit x86 Linux, I am trying to implement this process. > > I have two source code, written in C and Prolog. > In the Prolog code, I have two functions foo and foo1. > > So basically inside Prolog function foo, it calls function foo1 *through > a C wrapper,* then after function foo1 finished, it will return through > wrapper back to foo > > it is something like : > > --------------------------------------------------- > Prolog | C > --------------------------------------------------- > > foo ----- call ---- > foo1_wrapper normal > foo1 <-----call ----- foo1_wrapper normal > foo1 -------return---> foo1_wrapper normal > foo <-----return---- foo1_wrapper *fail!* > > > The problem is that, it can never return back to function foo after > foo1_wrapper returns.. > > I have done several test(printf, write, valgrind and others...), and I am > pretty sure that foo1 returns right value, and foo1_wrapper returns foo1's > return value as well. > > I am really confused right now, I should be able to look into the details, > however, I just don't know which way to go... > > Has anyone have certain problems like this...? > > > Best Regards, > Shuai > _______________________________________________ > Users-prolog mailing list > Users-prolog@gnu.org > https://lists.gnu.org/mailman/listinfo/users-prolog > > >
#include <gprolog.h> #include <stdio.h> #include <stdlib.h> PlBool babel_ptrR(PlLong* p, PlLong* star_p, PlLong len) { if (star_p == NULL) return PL_FALSE; else { switch(len) { case 1: *p = *(char*)star_p; break; case 2: *p = *(short*)star_p; break; case 4: *p = *(int*)star_p; break; case 8: *p = *(long long*)star_p; break; default : printf("undefined exp length in babel_ptrR\n"); } } *p = 0x7fffffffffff&*p; return PL_TRUE; } PlBool babel_ptrE(PlLong* p, PlLong e, PlLong len) { if (p == NULL) return PL_FALSE; switch(len) { case 1: *(char*)p = (char)e; break; case 2: *(short*) p = (short)e; break; case 4: *(int*)p = (int)e; break; case 8: *(long long*)p = (long long)e; break; default : printf("undefined exp length in babel_ptrL\n"); } return PL_TRUE; } PlBool babel_c_0(int arg_0, int * babel_ret) { *babel_ret = foo3(arg_0); return PL_TRUE; } PlBool babel_c_1(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_2(int * arg_0, int * arg_1, int arg_2, int arg_3) { foo_cil_lr_1(arg_0, arg_1, arg_2, arg_3); return PL_TRUE; } PlBool babel_c_3(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_4(int * arg_0, int arg_1, int arg_2) { foo3_cil_lr_1(arg_0, arg_1, arg_2); return PL_TRUE; } PlBool babel_c_5(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_6(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_7(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_8(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_9(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_10(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_11(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_12(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_13(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_14(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_15(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; } PlBool babel_c_16(char* arg_0, int arg_1) { printf(arg_0, arg_1); return PL_TRUE; }
babelJcc(OP, L, R) :- ( OP =:= 12 -> L =:= R ; OP =:= 13 -> L \= R ; OP =:= 14 -> L > R ; OP =:= 15 -> L =< R ; OP =:= 16 -> L < R ; OP =:= 17 -> L >= R ). :-foreign(babel_ptrR(-integer, +integer, +integer)). :-foreign(babel_ptrE(+integer, +integer, +integer)). babelPtrR(E, P, L) :- babel_ptrR(T, P, L), E is T. babelPtrL(P, E, L) :- babel_ptrE(P, E, L). babelAssign(Var, Val) :- Var is Val. babelAssignStr(Var, Val) :- Var = Val. babelAssignBool(Var, Val) :- Var = Val. babelArrayL([_|T], 0, X, [X|T]). babelArrayL([H|T], I, X, [H|R]):- I > -1, NI is I-1, babelArrayL(T, NI, X, R), !. babelArrayL(L, _, _, L). babelArrayR(X, [X|_], 0). babelArrayR(X, [_|T], I):- I > 0, NI is I-1, babelArrayR(X, T, NI), !. :- foreign(babel_c_0(+integer, -integer)). :- foreign(babel_c_1(+string, +integer)). :- foreign(babel_c_2(+integer, +integer, +integer, +integer)). :- foreign(babel_c_3(+string, +integer)). foo(__CIL_FP_A, __CIL_FP_FACT, __CIL_PP_A, __CIL_PP_FACT, N, __RETRES23) :- babelAssign(A, 0), babelAssign(FACT, 0), babelAssign(C, 0), babelAssign(R, 0), babelAssign(TMP, 0), babelAssign(__CIL_TMP11, 0), babelAssign(A_SSA_1, 1), babelAssign(FACT_SSA_1, 1), BabelExp_0 is A_SSA_1 + 1, babelAssign(A_SSA_2, BabelExp_0), (babelJcc(14, A_SSA_2, 2) -> babelAssign(__CIL_TMP11_SSA_1, 1) ; babelAssign(__CIL_TMP11_SSA_1, 0)), (babelJcc(13, __CIL_TMP11_SSA_1, 0) -> BabelExp_1 is A_SSA_2 + 2, babelAssign(A_SSA_3, BabelExp_1) ; babelAssign(A_SSA_3, 4)), babel_c_0(4 , TMP_SSA_1), babelAssign(R_SSA_1, TMP_SSA_1), babel_c_1('%d\n', R_SSA_1), babelAssign(C_SSA_1, 1), BabelExp_2 is A_SSA_3, babelPtrL(__CIL_FP_A, BabelExp_2, 4), BabelExp_3 is FACT_SSA_1, babelPtrL(__CIL_FP_FACT, BabelExp_3, 4), babel_c_2(__CIL_PP_A, __CIL_PP_FACT, N, C_SSA_1), BabelExp_4 is __CIL_FP_A, babelPtrR(A_SSA_4, BabelExp_4, 4), BabelExp_5 is __CIL_FP_FACT, babelPtrR(FACT_SSA_2, BabelExp_5, 4), babel_c_3('%d\n', FACT_SSA_2), BabelExp_6 is A_SSA_4 + 3, babelAssign(A_SSA_5, BabelExp_6),babelAssign(__RETRES23, 0). :- foreign(babel_c_4(+integer, +integer, +integer)). foo3(__CIL_FP_FACT, __CIL_PP_FACT, N, FACT_SSA_2) :- babelAssign(FACT, 0), babelAssign(C, 0), babelAssign(FACT_SSA_1, 0), babelAssign(C_SSA_1, 0), babelAssign(C_SSA_2, 1), BabelExp_7 is FACT_SSA_1, babelPtrL(__CIL_FP_FACT, BabelExp_7, 4), babel_c_4(__CIL_PP_FACT, N, C_SSA_2), BabelExp_8 is __CIL_FP_FACT, babelPtrR(FACT_SSA_2, BabelExp_8, 4). :- foreign(babel_c_5(+string, +integer)). :- foreign(babel_c_6(+string, +integer)). :- foreign(babel_c_7(+string, +integer)). :- foreign(babel_c_8(+string, +integer)). foo4(__CIL_FP_A, __CIL_PP_A, __RETRES28) :- babelAssign(A, 0), babelAssign(B, 0), babelAssign(C, 0), BabelExp_9 is 0, babelAssign(P, BabelExp_9), babelAssign(FACT, 0), babelAssign(N, 0), babelAssign(__CIL_TMP9, 0), babelAssign(__CIL_TMP10, 0), babelAssign(__CIL_TMP11, 0), babelAssign(__CIL_TMP12, 0), babelAssign(A_SSA_1, 2), babelAssign(B_SSA_1, 1), babelAssign(C_SSA_1, 3), babelAssign(P_SSA_1, __CIL_PP_A), babelAssign(FACT_SSA_1, 1), babelAssign(N_SSA_1, 10), (babelJcc(12, B_SSA_1, 1) -> babelAssign(__CIL_TMP9_SSA_1, 1) ; babelAssign(__CIL_TMP9_SSA_1, 0)), (babelJcc(13, __CIL_TMP9_SSA_1, 0) -> babelAssign(A_SSA_2, 3), (babelJcc(12, C_SSA_1, 2) -> babelAssign(__CIL_TMP10_SSA_1, 1) ; babelAssign(__CIL_TMP10_SSA_1, 0)), (babelJcc(13, __CIL_TMP10_SSA_1, 0) -> babelAssign(B_SSA_2, 2) ; babelAssign(B_SSA_2, 4)), BabelExp_10 is 2, babelPtrL(P_SSA_1, BabelExp_10, 4), BabelExp_11 is __CIL_FP_A, babelPtrR(A_SSA_3, BabelExp_11, 4), babelAssign(A_SSA_4, 5), babelAssign(__CIL_TMP11_SSA_1, __CIL_TMP11) ; babelAssign(A_SSA_2, 4), (babelJcc(12, C_SSA_1, 2) -> babelAssign(__CIL_TMP11_SSA_1, 1) ; babelAssign(__CIL_TMP11_SSA_1, 0)), (babelJcc(13, __CIL_TMP11_SSA_1, 0) -> babelAssign(B_SSA_2, 5) ; babelAssign(B_SSA_2, 6)), BabelExp_12 is 3, babelPtrL(P_SSA_1, BabelExp_12, 4), BabelExp_13 is __CIL_FP_A, babelPtrR(A_SSA_3, BabelExp_13, 4), babelAssign(A_SSA_4, 7), babelAssign(__CIL_TMP10_SSA_1, __CIL_TMP10)), babelAssign(B_SSA_3, A_SSA_4), babel_c_5('a : %d\n', A_SSA_4), babel_c_6('b : %d\n', B_SSA_3), babel_c_7('c : %d\n', C_SSA_1), BabelExp_14 is A_SSA_4, babelPtrL(__CIL_FP_A, BabelExp_14, 4), BabelExp_15 is P_SSA_1, babelPtrR(__CIL_TMP12_SSA_1, BabelExp_15, 4), babel_c_8('p : %d\n', __CIL_TMP12_SSA_1),babelAssign(__RETRES28, 0). :- foreign(babel_c_9(+string, +integer)). :- foreign(babel_c_10(+string, +integer)). :- foreign(babel_c_11(+string, +integer)). :- foreign(babel_c_12(+string, +integer)). :- foreign(babel_c_13(+string, +integer)). :- foreign(babel_c_14(+string, +integer)). :- foreign(babel_c_15(+string, +integer)). :- foreign(babel_c_16(+string, +integer)). foo1(__CIL_FP_B, __CIL_PP_B, A, B_SSA_3) :- babelAssign(B, 0), BabelExp_16 is 0, babelAssign(P, BabelExp_16), babelAssign(C, 0), babelAssign(__CIL_TMP7, 0), babelAssign(__CIL_TMP8, 0), babelAssign(B_SSA_1, A), BabelExp_17 is B_SSA_1, babelPtrL(__CIL_FP_B, BabelExp_17, 4), babelAssign(P_SSA_1, __CIL_PP_B), BabelExp_18 is B_SSA_1, babelPtrL(__CIL_FP_B, BabelExp_18, 4), BabelExp_19 is P_SSA_1, babelPtrR(C_SSA_1, BabelExp_19, 4), BabelExp_20 is B_SSA_1, babelPtrL(__CIL_FP_B, BabelExp_20, 4), BabelExp_21 is 5, babelPtrL(P_SSA_1, BabelExp_21, 4), BabelExp_22 is __CIL_FP_B, babelPtrR(B_SSA_2, BabelExp_22, 4), babel_c_9('a : %d\n', A), babel_c_10('b : %d\n', B_SSA_2), babel_c_11('c : %d\n', C_SSA_1), BabelExp_23 is B_SSA_2, babelPtrL(__CIL_FP_B, BabelExp_23, 4), BabelExp_24 is P_SSA_1, babelPtrR(__CIL_TMP7_SSA_1, BabelExp_24, 4), babel_c_12('p : %d\n', __CIL_TMP7_SSA_1), babelAssign(B_SSA_3, 6), babelAssign(C_SSA_2, 7), babel_c_13('a : %d\n', A), babel_c_14('b : %d\n', B_SSA_3), babel_c_15('c : %d\n', C_SSA_2), BabelExp_25 is B_SSA_3, babelPtrL(__CIL_FP_B, BabelExp_25, 4), BabelExp_26 is P_SSA_1, babelPtrR(__CIL_TMP8_SSA_1, BabelExp_26, 4), babel_c_16('p : %d\n', __CIL_TMP8_SSA_1).
/* Generated by CIL v. 1.5.1 */ /* print_CIL_Input is true */ #include <gprolog.h> int babel_wrapper_foo1(int * __cil_fp_b, int * __cil_pp_b, int a) // function name insert { // wrapper for function foo1 // function name insert int return_value; // return value type (how about array type) //rountine code int func; PlTerm arg[4]; // function variable + return value insert PlBool res; func = Pl_Find_Atom("foo1"); // function name insert //routine code Pl_Query_Begin(PL_FALSE); //prepare parameters //partial routine code, pass in parameter // we need to init arguments and return value // arg[0] = Pl_Mk_Integer(n); arg[0] = Pl_Mk_Integer(__cil_fp_b); arg[1] = Pl_Mk_Integer(__cil_pp_b); arg[2] = Pl_Mk_Integer(a); //routine code, reserve a place for return value arg[3] = Pl_Mk_Variable(); //partial routine code, 2 is not routine. (number of arguments) + 1 res = Pl_Query_Call(func, 4, arg); // insert (variable+return value) //get return value, partial routine code, 1 is not routine return_value = Pl_Rd_Integer(arg[3]); // insert () //routine code Pl_Query_End(PL_KEEP_FOR_PROLOG); //routine code return return_value; } int babel_wrapper_foo4(int * __cil_fp_a, int * __cil_pp_a) // function name insert { // wrapper for function foo4 // function name insert int return_value; // return value type (how about array type) //rountine code int func; PlTerm arg[3]; // function variable + return value insert PlBool res; func = Pl_Find_Atom("foo4"); // function name insert //routine code Pl_Query_Begin(PL_FALSE); //prepare parameters //partial routine code, pass in parameter // we need to init arguments and return value // arg[0] = Pl_Mk_Integer(n); arg[0] = Pl_Mk_Integer(__cil_fp_a); arg[1] = Pl_Mk_Integer(__cil_pp_a); //routine code, reserve a place for return value arg[2] = Pl_Mk_Variable(); //partial routine code, 2 is not routine. (number of arguments) + 1 res = Pl_Query_Call(func, 3, arg); // insert (variable+return value) //get return value, partial routine code, 1 is not routine return_value = Pl_Rd_Integer(arg[2]); // insert () //routine code Pl_Query_End(PL_KEEP_FOR_PROLOG); //routine code return return_value; } int babel_wrapper_foo3(int * __cil_fp_fact, int * __cil_pp_fact, int n) // function name insert { // wrapper for function foo3 // function name insert int return_value; // return value type (how about array type) //rountine code int func; PlTerm arg[4]; // function variable + return value insert PlBool res; func = Pl_Find_Atom("foo3"); // function name insert //routine code Pl_Query_Begin(PL_FALSE); //prepare parameters //partial routine code, pass in parameter // we need to init arguments and return value // arg[0] = Pl_Mk_Integer(n); arg[0] = Pl_Mk_Integer(__cil_fp_fact); arg[1] = Pl_Mk_Integer(__cil_pp_fact); arg[2] = Pl_Mk_Integer(n); //routine code, reserve a place for return value arg[3] = Pl_Mk_Variable(); //partial routine code, 2 is not routine. (number of arguments) + 1 res = Pl_Query_Call(func, 4, arg); // insert (variable+return value) //get return value, partial routine code, 1 is not routine return_value = Pl_Rd_Integer(arg[3]); // insert () //routine code Pl_Query_End(PL_KEEP_FOR_PROLOG); //routine code return return_value; } int babel_wrapper_foo(int * __cil_fp_a, int * __cil_fp_fact, int * __cil_pp_a, int * __cil_pp_fact, int n) // function name insert { // wrapper for function foo // function name insert int return_value; // return value type (how about array type) //rountine code int func; PlTerm arg[6]; // function variable + return value insert PlBool res; func = Pl_Find_Atom("foo"); // function name insert //routine code Pl_Query_Begin(PL_FALSE); //prepare parameters //partial routine code, pass in parameter // we need to init arguments and return value // arg[0] = Pl_Mk_Integer(n); arg[0] = Pl_Mk_Integer(__cil_fp_a); arg[1] = Pl_Mk_Integer(__cil_fp_fact); arg[2] = Pl_Mk_Integer(__cil_pp_a); arg[3] = Pl_Mk_Integer(__cil_pp_fact); arg[4] = Pl_Mk_Integer(n); //routine code, reserve a place for return value arg[5] = Pl_Mk_Variable(); //partial routine code, 2 is not routine. (number of arguments) + 1 res = Pl_Query_Call(func, 6, arg); // insert (variable+return value) //get return value, partial routine code, 1 is not routine return_value = Pl_Rd_Integer(arg[5]); // insert () //routine code Pl_Query_End(PL_KEEP_FOR_PROLOG); //routine code return return_value; } #line 4 "ssa_c.c" void foo3_cil_lr_1(int *__cil_ap_fact , int n , int c ) { int __cil_tmp4 ; int __cil_tmp5 ; int __cil_tmp4_ssa_1 ; int __cil_tmp5_ssa_1 ; int c_ssa_1 ; { #line 6 __cil_tmp4 = 0; #line 7 __cil_tmp5 = 0; #line 39 "ssa_condition.c" __cil_tmp4_ssa_1 = c <= n; #line 39 if (__cil_tmp4_ssa_1 == 0) { #line 40 goto return_label; } else { } #line 40 __cil_tmp5_ssa_1 = *__cil_ap_fact; #line 40 *__cil_ap_fact = __cil_tmp5_ssa_1 + c; #line 39 c_ssa_1 = c + 1; #line 42 foo3_cil_lr_1(__cil_ap_fact, n, c_ssa_1); return_label: /* CIL Label */ #line 4 "ssa_c.c" return; } } #line 47 "ssa_condition.c" void foo_cil_lr_1(int *__cil_ap_a , int *__cil_ap_fact , int n , int c ) { int __cil_tmp5 ; int __cil_tmp6 ; int __cil_tmp5_ssa_1 ; int __cil_tmp6_ssa_1 ; int c_ssa_1 ; { #line 49 __cil_tmp5 = 0; #line 50 __cil_tmp6 = 0; #line 21 __cil_tmp5_ssa_1 = c <= n; #line 21 if (__cil_tmp5_ssa_1 == 0) { #line 22 goto return_label; } else { } #line 22 __cil_tmp6_ssa_1 = *__cil_ap_fact; #line 22 *__cil_ap_fact = __cil_tmp6_ssa_1 + c; #line 21 c_ssa_1 = c + 1; #line 24 foo_cil_lr_1(__cil_ap_a, __cil_ap_fact, n, c_ssa_1); return_label: /* CIL Label */ #line 47 return; } } #line 17 int foo3(int n ) ; #line 19 extern int printf() ; #line 1 "ssa_condition.c" int foo(int n ) { int a ; int fact ; int c ; int r ; int tmp ; int *__cil_fp_a ; int *__cil_fp_fact ; int *__cil_pp_a ; int *__cil_pp_fact ; int __cil_tmp11 ; int a_ssa_1 ; int fact_ssa_1 ; int a_ssa_2 ; int __cil_tmp11_ssa_1 ; int a_ssa_3 ; int tmp_ssa_1 ; int r_ssa_1 ; int c_ssa_1 ; int a_ssa_4 ; int fact_ssa_2 ; int a_ssa_5 ; int __retres23 ; { #line 3 __cil_pp_fact = & fact; #line 3 __cil_pp_a = & a; #line 3 __cil_fp_fact = & fact; #line 3 __cil_fp_a = & a; #line 3 return babel_wrapper_foo(__cil_fp_a, __cil_fp_fact, __cil_pp_a, __cil_pp_fact, n); #line 3 a = 0; #line 4 fact = 0; #line 5 c = 0; #line 6 r = 0; #line 7 tmp = 0; #line 8 __cil_fp_a = & a; #line 9 __cil_fp_fact = & fact; #line 10 __cil_pp_a = & a; #line 11 __cil_pp_fact = & fact; #line 12 __cil_tmp11 = 0; #line 3 a_ssa_1 = 1; #line 4 fact_ssa_1 = 1; #line 5 a_ssa_2 = a_ssa_1 + 1; #line 8 __cil_tmp11_ssa_1 = a_ssa_2 > 2; #line 8 if (__cil_tmp11_ssa_1 != 0) { #line 10 a_ssa_3 = a_ssa_2 + 2; } else { #line 14 a_ssa_3 = 4; } #line 17 tmp_ssa_1 = foo3(4); #line 17 r_ssa_1 = tmp_ssa_1; #line 19 printf("%d\n", r_ssa_1); #line 21 c_ssa_1 = 1; #line 24 *__cil_fp_a = a_ssa_3; #line 25 *__cil_fp_fact = fact_ssa_1; #line 21 foo_cil_lr_1(__cil_pp_a, __cil_pp_fact, n, c_ssa_1); #line 22 a_ssa_4 = *__cil_fp_a; #line 23 fact_ssa_2 = *__cil_fp_fact; #line 24 printf("%d\n", fact_ssa_2); #line 26 a_ssa_5 = a_ssa_4 + 3; #line 28 __retres23 = 0; #line 1 return (__retres23); } } #line 34 "ssa_condition.c" int foo3(int n ) { int fact ; int c ; int *__cil_fp_fact ; int *__cil_pp_fact ; int fact_ssa_1 ; int c_ssa_1 ; int c_ssa_2 ; int fact_ssa_2 ; { #line 36 __cil_pp_fact = & fact; #line 36 __cil_fp_fact = & fact; #line 36 return babel_wrapper_foo3(__cil_fp_fact, __cil_pp_fact, n); #line 36 fact = 0; #line 37 c = 0; #line 38 __cil_fp_fact = & fact; #line 39 __cil_pp_fact = & fact; #line 36 fact_ssa_1 = 0; #line 37 c_ssa_1 = 0; #line 39 c_ssa_2 = 1; #line 42 *__cil_fp_fact = fact_ssa_1; #line 39 foo3_cil_lr_1(__cil_pp_fact, n, c_ssa_2); #line 40 fact_ssa_2 = *__cil_fp_fact; #line 43 return (fact_ssa_2); } } #line 49 "ssa_condition.c" int foo4(void) { int a ; int b ; int c ; int *p ; int fact ; int n ; int *__cil_fp_a ; int *__cil_pp_a ; int __cil_tmp9 ; int __cil_tmp10 ; int __cil_tmp11 ; int __cil_tmp12 ; int a_ssa_1 ; int b_ssa_1 ; int c_ssa_1 ; int *p_ssa_1 ; int fact_ssa_1 ; int n_ssa_1 ; int __cil_tmp9_ssa_1 ; int a_ssa_2 ; int __cil_tmp10_ssa_1 ; int b_ssa_2 ; int a_ssa_3 ; int a_ssa_4 ; int __cil_tmp11_ssa_1 ; int b_ssa_3 ; int __cil_tmp12_ssa_1 ; int __retres28 ; { #line 51 __cil_pp_a = & a; #line 51 __cil_fp_a = & a; #line 51 return babel_wrapper_foo4(__cil_fp_a, __cil_pp_a); #line 51 a = 0; #line 52 b = 0; #line 53 c = 0; #line 54 p = (int *)0; #line 55 fact = 0; #line 56 n = 0; #line 57 __cil_fp_a = & a; #line 58 __cil_pp_a = & a; #line 59 __cil_tmp9 = 0; #line 60 __cil_tmp10 = 0; #line 61 __cil_tmp11 = 0; #line 62 __cil_tmp12 = 0; #line 53 a_ssa_1 = 2; #line 54 b_ssa_1 = 1; #line 55 c_ssa_1 = 3; #line 57 p_ssa_1 = __cil_pp_a; #line 59 fact_ssa_1 = 1; #line 61 n_ssa_1 = 10; #line 63 __cil_tmp9_ssa_1 = b_ssa_1 == 1; #line 63 if (__cil_tmp9_ssa_1 != 0) { #line 65 a_ssa_2 = 3; #line 67 __cil_tmp10_ssa_1 = c_ssa_1 == 2; #line 67 if (__cil_tmp10_ssa_1 != 0) { #line 68 b_ssa_2 = 2; } else { #line 70 b_ssa_2 = 4; } #line 71 *p_ssa_1 = 2; #line 72 a_ssa_3 = *__cil_fp_a; #line 72 a_ssa_4 = 5; #line 73 __cil_tmp11_ssa_1 = __cil_tmp11; } else { #line 76 a_ssa_2 = 4; #line 77 __cil_tmp11_ssa_1 = c_ssa_1 == 2; #line 77 if (__cil_tmp11_ssa_1 != 0) { #line 78 b_ssa_2 = 5; } else { #line 80 b_ssa_2 = 6; } #line 81 *p_ssa_1 = 3; #line 82 a_ssa_3 = *__cil_fp_a; #line 82 a_ssa_4 = 7; #line 83 __cil_tmp10_ssa_1 = __cil_tmp10; } #line 86 b_ssa_3 = a_ssa_4; #line 89 printf("a : %d\n", a_ssa_4); #line 90 printf("b : %d\n", b_ssa_3); #line 91 printf("c : %d\n", c_ssa_1); #line 92 *__cil_fp_a = a_ssa_4; #line 92 __cil_tmp12_ssa_1 = *p_ssa_1; #line 92 printf("p : %d\n", __cil_tmp12_ssa_1); #line 94 __retres28 = 0; #line 49 return (__retres28); } } #line 98 "ssa_condition.c" int foo1(int a ) { int b ; int *p ; int c ; int *__cil_fp_b ; int *__cil_pp_b ; int __cil_tmp7 ; int __cil_tmp8 ; int b_ssa_1 ; int *p_ssa_1 ; int c_ssa_1 ; int b_ssa_2 ; int __cil_tmp7_ssa_1 ; int b_ssa_3 ; int c_ssa_2 ; int __cil_tmp8_ssa_1 ; { #line 100 __cil_pp_b = & b; #line 100 __cil_fp_b = & b; #line 100 return babel_wrapper_foo1(__cil_fp_b, __cil_pp_b, a); #line 100 b = 0; #line 101 p = (int *)0; #line 102 c = 0; #line 103 __cil_fp_b = & b; #line 104 __cil_pp_b = & b; #line 105 __cil_tmp7 = 0; #line 106 __cil_tmp8 = 0; #line 100 b_ssa_1 = a; #line 101 *__cil_fp_b = b_ssa_1; #line 101 p_ssa_1 = __cil_pp_b; #line 102 *__cil_fp_b = b_ssa_1; #line 103 c_ssa_1 = *p_ssa_1; #line 104 *__cil_fp_b = b_ssa_1; #line 105 *p_ssa_1 = 5; #line 106 b_ssa_2 = *__cil_fp_b; #line 106 printf("a : %d\n", a); #line 107 printf("b : %d\n", b_ssa_2); #line 108 printf("c : %d\n", c_ssa_1); #line 109 *__cil_fp_b = b_ssa_2; #line 109 __cil_tmp7_ssa_1 = *p_ssa_1; #line 109 printf("p : %d\n", __cil_tmp7_ssa_1); #line 112 b_ssa_3 = 6; #line 113 c_ssa_2 = 7; #line 115 printf("a : %d\n", a); #line 116 printf("b : %d\n", b_ssa_3); #line 117 printf("c : %d\n", c_ssa_2); #line 118 *__cil_fp_b = b_ssa_3; #line 118 __cil_tmp8_ssa_1 = *p_ssa_1; #line 118 printf("p : %d\n", __cil_tmp8_ssa_1); #line 124 return (b_ssa_3); } } #line 129 "ssa_condition.c" int main(int argc , char **argv ) { int __retres3 ; { Pl_Start_Prolog(argc, argv); #line 131 foo1(1); #line 133 foo(5); #line 135 __retres3 = 0; { Pl_Stop_Prolog(); #line 129 return (__retres3); } } }
Makefile.bak
Description: Binary data
_______________________________________________ Users-prolog mailing list Users-prolog@gnu.org https://lists.gnu.org/mailman/listinfo/users-prolog