[cfe-commits] r167717 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td include/clang/Basic/TargetInfo.h lib/Basic/Targets.cpp lib/Sema/SemaStmtAsm.cpp test/CodeGen/x86_32-inline-asm.c

Dimitry Andric dimitry at andric.com
Mon Nov 12 05:01:58 PST 2012


On 2012-11-12 10:49, Eli Friedman wrote:
> On Sun, Nov 11, 2012 at 10:42 PM, Bill Wendling <isanbard at gmail.com> wrote:
>> Author: void
>> Date: Mon Nov 12 00:42:51 2012
>> New Revision: 167717
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=167717&view=rev
>> Log:
>> Check that the input size is correct for the given constraint.
>>
>> The 'a', 'c', and 'd' constraints on i386 mean a 32-bit register.
>
> This is not completely true.  It could also mean an 8-bit register or
> a 16-bit register.

Indeed, on our FreeBSD buildbot we're now getting errors:

   In file included from /data/buildslave/freebsd-clang-amd64/src-freebsd/sys/boot/ficl/i386/sysdep.c:18:
   ./machine/cpufunc.h:266:43: error: invalid input size for constraint 'a'
           __asm __volatile("outb %0, %w1" : : "a" (data), "Nd" (port));
                                                    ^

on this inline function (u_int and u_char are just aliases for unsigned
int and unsigned char):

   static __inline void
   outb(u_int port, u_char data)
   {
           __asm __volatile("outb %0, %w1" : : "a" (data), "Nd" (port));
   }



More information about the cfe-commits mailing list