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