[Coco] CC issue

Jeff Teunissen deek at d2dc.net
Sat Nov 9 15:35:49 EST 2019


Of course, I am speaking as someone looking at source, not trying to
grovel through a binary. build.c (comp_03.c in the decompiled source)
is PROBABLY where you should look (it is responsible for building the
compiler's expression trees), but possibly tranexp.c (AKA comp_13.c),
which does expression translation.

On Sat, Nov 9, 2019 at 2:05 AM Jeff Teunissen <deek at d2dc.net> wrote:
>
> Sounds like it's actually two bugs, and both should be fairly simple.
>
> Firstly, preprocessor statements that actually make it to the compiler
> need to be considered new statements.
> Secondly, the end of a block should complete a statement.
>
> On Fri, Nov 8, 2019 at 12:52 AM Walter Zambotti <zambotti at iinet.net.au> wrote:
> >
> > I found a small issue in both c.pass1/2 and o c_comp.
> >
> >
> >
> > In the following demonstrative code (which is not meant to be logical):
> >
> >
> >
> > main()
> >
> > {
> >
> >   int I;
> >
> >   while(i++) { i--;}
> >
> > #asm
> >
> >   clra
> >
> >   clrb
> >
> > #endasm
> >
> >   i = i + 1;
> >
> > }
> >
> >
> >
> > The asm code is incorrectly placed inside the while loop.
> >
> >
> >
> > This occurs because the compiler is looking for a semicolon after the loop
> > block.  Which of course is not required and is tolerated.
> >
> > However while it is looking for the semicolon if it comes across any
> > comments it outputs them immediately doing so before it has
> > finalised the output for the loop.
> >
> >
> >
> > This issue does effect program execution.
> >
> >
> >
> > The easy work around is to place an extraneous semicolon after the loop
> > block like so:
> >
> >
> >
> >   while(i++) { i--;};
> >
> > or
> >
> > while(i++) i++;;
> >
> >
> >
> > This forces the compiler to place the asm code after the loop as expected.
> >
> >
> >
> > This occurs for any statement block that contains exit logic such as:
> >
> >
> >
> > While, for, switch
> >
> >
> >
> > This also affects C lines added as comments to the assembly.  The C comment
> > lines appear out of context to their respective asm.
> >
> >
> >
> > This last issue does not effect program execution but makes it difficult to
> > use the assembly listing to debug your code.
> >
> >
> >
> > I have traced through c.comp extensively and the fix would not be easy.
> >
> >
> >
> > I did however manage to add a fix to c.prep so that it outputs a semicolon
> > before any asm code.  This seems to fix the
> > issue but would need extensive testing.
> >
> >
> >
> > Walter
> >
> >
> > --
> > Coco mailing list
> > Coco at maltedmedia.com
> > https://pairlist5.pair.net/mailman/listinfo/coco


More information about the Coco mailing list