Hi Eric

Please find attached some simple test cases.
These were compiled using the following



./romcc -O  -fno-eliminate-inefectual-code
-I../../../../../src/arch/i386/include/  -o testdef3.inc  testdef3.c

if you look at testdef2.c, testdef2.inc you can see that a C++ comment
has caused one line to be missed, no comment or a C comment are fine. I
checked no comments, C comments and C++ comments on both the #if and
#else lines. The one thing I did not check was a C++ comment on the
#endif to see if the following line was missed.

I may be missing needed options for romcc, but I have tried similar
tests in a proper build, with the same results.

regards
Ben


> Stefan Reinauer <[EMAIL PROTECTED]> writes:
>
>   
>> Hi,
>>
>> since the romcc builtin preprocessor silently eats lines of code,
>> can we just use the gcc preprocessor (cpp) before calling romcc as
>> a workaround? 
>>     
>
> I'd love to see a reproducer of that problem.  I don't have a good feel
> that it has been root caused.  The parser is fairly straight forward
> so if we can reproduce this problem it shouldn't be hard to fix.
>
> I'm not convinced the problem is actually isolated to just the c pre 
> processor.
>
>   
>> Is there a reason romcc has its own preprocessor?
>>     
>
> A couple of reasons.
> - It was comparatively easy.
> - It makes the dependencies much easier to get right.
> - We don't have to worry about gcc polluting the compile with #defines
>   that are not correct for the romcc environment.
> - There are several C features that you cannot implement properly unless
>   you implement some level of c preprocessor.
>
> All of that said you can look back into the history to when romcc did not have
> a preprocessor and can probably make that work.  I'd much rather fix
> the stupid parsing bug.
>
> Eric
>
>
>   

#include <arch/io.h>

#ifndef TEST_DEF
#define TEST_DEF 0
#endif





void main(void)
{

	outb(10,100);
	
#if	TEST_DEF
	outb(11,200);
	outb(12,200);
#else // this shouldnt work
	outb(11,100);
	outb(12,100);
#endif
		
	
	outb(15,100);

}

 
.section ".rom.data"
.balign 16
L1:
.int 0xff, 0, 0, 0
L2:
.int 0xffff, 0, 0, 0
.section ".rom.text"
        /* ,(null):0.0 */
L1001:
L1002:
        /* outb,io.h:14.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* outw,io.h:19.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* outl,io.h:24.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* inb,io.h:30.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* inw,io.h:36.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* inl,io.h:41.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* outsb,io.h:85.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* outsw,io.h:94.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* outsl,io.h:103.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* insb,io.h:113.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* insw,io.h:122.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* insl,io.h:131.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* writeb,io.h:140.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* writew,io.h:145.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* writel,io.h:150.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* readb,io.h:155.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* readw,io.h:160.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* readl,io.h:165.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* main,testdef.c:12.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6d
.byte 0x61
.byte 0x69
.byte 0x6e
.byte 0x00
.section ".rom.text"
        /* ,(null):0.0 */
        /* ,:0.0 */
#ASM
        
#NOT ASM
        /* main,testdef.c:12.1 */
        /* main,testdef.c:14.16 */
        /* main,testdef.c:14.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef.c:14.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef.c:14.13
         */
        mov  $10 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef.c:14.13
         */
        /* main,testdef.c:20.16 */
        /* main,testdef.c:20.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef.c:20.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef.c:20.13
         */
        mov  $11 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef.c:20.13
         */
        /* main,testdef.c:21.16 */
        /* main,testdef.c:21.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef.c:21.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef.c:21.13
         */
        mov  $12 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef.c:21.13
         */
        /* main,testdef.c:25.16 */
        /* main,testdef.c:25.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef.c:25.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef.c:25.13
         */
        mov  $15 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef.c:25.13
         */
        /* main,testdef.c:12.1 */
        /* ,:0.0 */
 /* unknown %eax */
 /* unknown %ebx */
 /* unknown %ecx */
 /* unknown %edx */
#ASM
        
#NOT ASM
/* max inline depth 3 */
#include <arch/io.h>

#ifndef TEST_DEF
#define TEST_DEF 0
#endif





void main(void)
{

	outb(10,100);
	
#if	TEST_DEF
	outb(11,200);
	outb(12,200);
#else // this shouldnt work
	outb(11,100);
	outb(12,100);
#endif
		
	
	outb(15,100);

}

 
.section ".rom.data"
.balign 16
L1:
.int 0xff, 0, 0, 0
L2:
.int 0xffff, 0, 0, 0
.section ".rom.text"
        /* ,(null):0.0 */
L1001:
L1002:
        /* outb,io.h:14.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* outw,io.h:19.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* outl,io.h:24.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* inb,io.h:30.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* inw,io.h:36.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* inl,io.h:41.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* outsb,io.h:85.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* outsw,io.h:94.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* outsl,io.h:103.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* insb,io.h:113.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* insw,io.h:122.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* insl,io.h:131.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* writeb,io.h:140.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* writew,io.h:145.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* writel,io.h:150.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* readb,io.h:155.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* readw,io.h:160.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* readl,io.h:165.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* main,testdef.c:12.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6d
.byte 0x61
.byte 0x69
.byte 0x6e
.byte 0x00
.section ".rom.text"
        /* ,(null):0.0 */
        /* ,:0.0 */
#ASM
        
#NOT ASM
        /* main,testdef.c:12.1 */
        /* main,testdef.c:14.16 */
        /* main,testdef.c:14.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef.c:14.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef.c:14.13
         */
        mov  $10 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef.c:14.13
         */
        /* main,testdef.c:21.16 */
        /* main,testdef.c:21.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef.c:21.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef.c:21.13
         */
        mov  $12 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef.c:21.13
         */
        /* main,testdef.c:25.16 */
        /* main,testdef.c:25.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef.c:25.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef.c:25.13
         */
        mov  $15 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef.c:25.13
         */
        /* main,testdef.c:12.1 */
        /* ,:0.0 */
 /* unknown %eax */
 /* unknown %ebx */
 /* unknown %ecx */
 /* unknown %edx */
#ASM
        
#NOT ASM
/* max inline depth 3 */
#include <arch/io.h>

#ifndef TEST_DEF
#define TEST_DEF 0
#endif





void main(void)
{

	outb(10,100);
	
#if	TEST_DEF
	outb(11,200);
	outb(12,200);
#else /* this does work */
	outb(11,100);
	outb(12,100);
#endif
		
	
	outb(15,100);

}

 
.section ".rom.data"
.balign 16
L1:
.int 0xff, 0, 0, 0
L2:
.int 0xffff, 0, 0, 0
.section ".rom.text"
        /* ,(null):0.0 */
L1001:
L1002:
        /* outb,io.h:14.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* outw,io.h:19.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* outl,io.h:24.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* inb,io.h:30.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* inw,io.h:36.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* inl,io.h:41.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* outsb,io.h:85.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* outsw,io.h:94.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* outsl,io.h:103.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* insb,io.h:113.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* insw,io.h:122.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* insl,io.h:131.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* writeb,io.h:140.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* writew,io.h:145.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* writel,io.h:150.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* readb,io.h:155.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x62
.byte 0x00
.section ".rom.text"
        /* readw,io.h:160.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x77
.byte 0x00
.section ".rom.text"
        /* readl,io.h:165.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x6c
.byte 0x00
.section ".rom.text"
        /* main,testdef3.c:12.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6d
.byte 0x61
.byte 0x69
.byte 0x6e
.byte 0x00
.section ".rom.text"
        /* ,(null):0.0 */
        /* ,:0.0 */
#ASM
        
#NOT ASM
        /* main,testdef3.c:12.1 */
        /* main,testdef3.c:14.16 */
        /* main,testdef3.c:14.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef3.c:14.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef3.c:14.13
         */
        mov  $10 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef3.c:14.13
         */
        /* main,testdef3.c:20.16 */
        /* main,testdef3.c:20.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef3.c:20.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef3.c:20.13
         */
        mov  $11 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef3.c:20.13
         */
        /* main,testdef3.c:21.16 */
        /* main,testdef3.c:21.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef3.c:21.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef3.c:21.13
         */
        mov  $12 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef3.c:21.13
         */
        /* main,testdef3.c:25.16 */
        /* main,testdef3.c:25.20 */
        /* ,:0.0 */
        /*
         * outb,io.h:14.1
         * main,testdef3.c:25.13
         */
        /*
         * __builtin_outb,<built-in>:1.0
         * outb,io.h:15.23
         * main,testdef3.c:25.13
         */
        mov  $15 , %al
        outb %al, $100 
        /*
         * outb,io.h:14.1
         * main,testdef3.c:25.13
         */
        /* main,testdef3.c:12.1 */
        /* ,:0.0 */
 /* unknown %eax */
 /* unknown %ebx */
 /* unknown %ecx */
 /* unknown %edx */
#ASM
        
#NOT ASM
/* max inline depth 3 */
-- 
linuxbios mailing list
[email protected]
http://www.openbios.org/mailman/listinfo/linuxbios

Reply via email to