Hi, all We post this message for someone who might be put in a great quandary like us.
Please look at the sample codes: ============================================================ #define NR_TEST_FUNCS 2 typedef code struct test_funcs { void (*non)(void); } test_funcs_c; test_funcs_c * data test_funcs[NR_TEST_FUNCS]; uint8_t nr_test_funcs = 0; void register_test_func(test_funcs_c *funcs) { if (nr_test_funcs < NR_TEST_FUNCS-1) { test_funcs[nr_test_funcs] = funcs; nr_test_funcs++; } } void test_non(void) { dbg_dump(1); } test_funcs_c funcs1 = { test_non, }; test_funcs_c funcs2 = { test_non, }; static void test_funcs_ptr(void) { uint8_t i; test_funcs_c *p; register_test_func(&funcs1); register_test_func(&funcs2); for (i = 0; i < nr_test_funcs; i++) { /* the way can work */ p = test_funcs[i]; (p->non)(); #if 0 /* the way cannot work */ (test_funcs[i]->non)(); #endif } } ============================================================ It seems a compiler bug, compiler cannot generate correct codes for structure member location in the latter one. Please look at the generated codes for the differences: ============================================================ ; p = test_funcs[i]; mov a,r2 add a,r2 add a,#_test_funcs mov r0,a mov ar3,@r0 inc r0 mov ar4,@r0 dec r0 mov dpl,r3 mov dph,r4 ; (p->non)(); clr a movc a,@a+dptr mov r3,a inc dptr clr a movc a,@a+dptr mov r4,a push ar2 push ar3 push ar4 mov dpl,r3 mov dph,r4 lcall __sdcc_call_dptr pop ar4 pop ar3 pop ar2 ============================================================ ; (test_funcs[i]->non)(); mov a,r2 add a,r2 add a,#_test_funcs mov r0,a mov ar0,@r0 mov ar3,@r0 inc r0 mov ar4,@r0 dec r0 push ar2 push ar3 push ar4 mov dpl,r3 mov dph,r4 lcall __sdcc_call_dptr pop ar4 pop ar3 pop ar2 ============================================================ Best regards/Lv Zheng ------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user