x86_32-inline-asm.c revision 5ece32e3359ca34fcdab07829f5e9fdbfd157f78
1// RUN: %clang_cc1 -triple i386-apple-darwin9 -verify %s 2// <rdar://problem/12415959> 3 4typedef unsigned int u_int32_t; 5typedef u_int32_t uint32_t; 6 7typedef unsigned long long u_int64_t; 8typedef u_int64_t uint64_t; 9 10struct S; 11 12int func(struct S *s) { 13 // Error out if size is > 32-bits. 14 uint32_t msr = 0x8b; 15 uint64_t val = 0; 16 __asm__ volatile("wrmsr" 17 : 18 : "c" (msr), 19 "a" ((val & 0xFFFFFFFFUL)), // expected-error {{invalid input size for constraint 'a'}} 20 "d" (((val >> 32) & 0xFFFFFFFFUL))); 21 22 // Don't error out if the size of the destination is <= 32 bits. 23 unsigned char data; 24 unsigned int port; 25 __asm__ volatile("outb %0, %w1" : : "a" (data), "Nd" (port)); // No error expected. 26 27 // Don't error out for incomplete types. 28 __asm(""::"a"(*s)); // No error expected. 29} 30