Bug in 4.[12] BSD C compiler with "asm" statement

Marc Elvy elvy at harvard.ARPA
Wed Jul 4 11:11:57 AEST 1984


Subject: Bug in "asm" statement in 4.X BSD C compiler
Index:	/lib/ccom and its neigbors

Description:

	The "asm" statement is handled incorrectly in both the 4.1BSD and
	4.2BSD C compilers.  An "asm" after an "if" is placed within the
	range of the "if"; braces make no difference.

Repeat-By:

	Compile the following C program.  This was prepared explicitly for
	illustration purposes (which is why R11 is assumed), so please do
	not waste your time hassling me about the philosophical problems
	with "asm" statements.


	main ()
	{
	    register int flag = 0;

	    if (flag == 1)
		flag = 0;

	    asm ("movl	$666, r11");
	}


	The relevant portion of the assembly language produced follows.


		clrl	r11
		cmpl	r11,$1
		jneq	L16
		clrl	r11
	movl	$666, r11		/* Here is the "asm" statement. */
	L16:
		ret

	Note that the "movl" should be AFTER the label, not before.
	Unfortunately, I have not discovered why this is done, but I
	suspect that the asm statement is dumped before the if statement
	is completely processed.

Marc


		      Marc A. Elvy  ( elvy at harvard.{arpa,uucp} )
			     Aiken Computation Laboratory
				  Harvard University



More information about the Comp.lang.c mailing list