blob: a9038abc84b5ac755049087aa9630b7f7470f2b8 [file] [log] [blame]
Bill Wendling68fd6082012-11-12 06:42:51 +00001// 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
Bill Wendling5ece32e2012-11-12 22:01:56 +000010struct S;
11
12int func(struct S *s) {
Bill Wendlingba541d32012-11-12 21:13:35 +000013 // Error out if size is > 32-bits.
Bill Wendling68fd6082012-11-12 06:42:51 +000014 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)));
Bill Wendlingba541d32012-11-12 21:13:35 +000021
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.
Bill Wendling5ece32e2012-11-12 22:01:56 +000026
27 // Don't error out for incomplete types.
28 __asm(""::"a"(*s)); // No error expected.
Bill Wendling68fd6082012-11-12 06:42:51 +000029}