I checked the source code and it appears that the problem is in the
stm8/gen.c in function genCall. I changed the following line:
emit2 ("call", "%s", aopGet2 (left->aop, 0));
to
emit2 ("call", "%s", left->aop->aopu.immd);
and it looks like to solve the problem. I hope someone correct me or the
source code.

On Tue, Apr 14, 2020 at 4:37 PM Vahid Bashiri <vdbash...@gmail.com> wrote:

> This is not the assembler.
> For first call generated code is: call #(_func + 0) which is not a valid
> stm8 assembly. For second call sdcc generates call (x) where x contains
> the address of _func which is correct.
>
> On Tue, Apr 14, 2020 at 1:30 PM Philipp Klaus Krause <p...@spth.de> wrote:
>
>> Am 14.04.20 um 07:51 schrieb Vahid Bashiri:
>> > int func(void *var,int val);
>> > typedef int (*SetVal)(void *, int);
>> > typedef struct {
>> >                 int val;
>> >                 SetVal setval;
>> >                 } my_struct;
>> > int main()
>> > {
>> >
>> >     my_struct str1 = {0,func};
>> >     my_struct str2 = {0,func};
>> >     str1.setval(&str1,11);
>> >     str2.setval(&str2,5);
>> >     return 0;
>> > }
>> > int func(void *var,int val)
>> > {
>> >     my_struct *tmp = (my_struct*)var;
>> >     tmp->val = val;
>> >     return 0;
>> > }
>> >
>>
>> I can reproduce this issue; it is definitely a bug.
>>
>> Plese report it in the bug tracker:
>> https://sourceforge.net/p/sdcc/bugs/
>>
>> Though looking at the asm, at first sight it looks more like an
>> assembler bug rather than a compiler bug to me.
>>
>> Philipp
>>
>> _______________________________________________
>> Sdcc-user mailing list
>> Sdcc-user@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/sdcc-user
>>
>
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to