http://llvm.org/bugs/show_bug.cgi?id=22813
Bug ID: 22813
Summary: AARCH32 asm("b %0":: "i" (3)) should issues a warning
Product: clang
Version: 3.6
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: -New Bugs
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Classification: Unclassified
follow up from the comments at bug #22761. with LLVM/Clang 3.6 targeting
ARCH322 this compiles without warnings/errors:
__asm ("b %0":: "i" (0)); // 10000004: ea000000 b 1000000c (+0x08)
__asm ("b %0":: "i" (1)); // 10000008: ea000000 b 10000010 (+0x08)
__asm ("b %0":: "i" (2)); // 1000000c: ea000000 b 10000014 (+0x08)
__asm ("b %0":: "i" (3)); // 10000010: ea000000 b 10000018 (+0x08)
__asm ("b %0":: "i" (4)); // 10000014: ea000001 b 10000020 (+0x0C)
But it silently clears out the lower two bits if they are not zero. This should
actually give a warning. In ARM mode any constant must be a multiple of 4, in
TUMB mode it must be a multiple of 2. Anything else cannot even be encoded in
the instruction. So at least a warning here would be nice, like is is done
when targeting AARCH64 here
__asm ("b %0":: "i" (0)); // ok for any multiple of 4
__asm ("b %0":: "i" (1)); // error for any non-multiple of 4
error: expected label or encodable integer pc offset
__asm ("b %0":: "i" (1));
<inline asm>:1:4: note: instantiated into assembly here
b #1
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs