[PATCH] D15075: No error for conflict between inputs\outputs and clobber list

Akira Hatanaka via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 26 13:05:52 PST 2016

ahatanak added a comment.

> After going a bit through the log, I think that there is no reason for clang to not detect it, probably the check was just forgotten.


> This patch is the check.

Which part of your patch (in SemaStmtAsm.cpp) is supposed to catch that? I applied this patch and rebuilt clang, but it still doesn't error out when it compiles the function in my example (foo1).

> "r" constraint means (taken from the spec:) A register operand is allowed provided that it is in a general register.

>  ("%rcx") means - use the register rcx.

Isn't a) equivalent to b)?

__asm__ __volatile__ ("asm1 %0, %1": "=a" (c) : "r" ("%ebx") : "cc", "ebx"); // do "b" and "%ebx" overlap?

const char *s = "%ebx";
__asm__ __volatile__ ("asm1 %0, %1": "=a" (c) : "r" (s) : "cc", "ebx");

gcc and clang generate the same code for these two statements. I believe constraint "r" means clang can use any general purpose registers for the operand.


More information about the cfe-commits mailing list