Clang汇编器是否支持整数字面量的“u”后缀?求官方文档
Clang-14.0.0编译ARM64汇编文件的
u后缀支持问题求证 问题场景
- 使用Clang-14.0.0编译ARM64汇编文件
system/startup_mcore.S时,第374行代码.word (0x43B90000u)触发报错:expected')' - 删除字面量后的
u后缀,改为.word (0x43B90000)后,编译正常通过 - 此前有说法称Clang不支持汇编整数字面量的
u/U后缀,但未找到对应官方文档依据,现求证该规则的官方定义
官方文档依据说明
Clang使用的LLVM集成汇编器(LLVM Integrated Assembler)在处理AArch64架构汇编代码时,遵循以下官方规范:
- ARM官方架构手册:在《ARM Architecture Reference Manual Armv8, for Armv8-A architecture profile》的汇编语法章节中,明确规定整数字面量无需通过
u/U后缀声明无符号属性——汇编中数据的宽度和符号属性由伪指令(如.word/.dword)或指令上下文决定,而非字面量后缀。 - LLVM汇编器规范:LLVM官方文档(LLVM Language Reference Manual 汇编相关章节)中,未提及支持
u/U作为汇编字面量的后缀标识。同时LLVM汇编器尽可能兼容GNU汇编器(GAS),而GAS的AArch64语法同样不支持该后缀用法。 - Clang汇编处理逻辑:Clang对汇编代码的解析严格遵循目标架构的语法标准,AArch64汇编中不存在
u/U后缀的合法用法,因此带该后缀的字面量会被判定为语法错误。
结论
Clang-14.0.0编译ARM64汇编时不支持整数字面量的u/U后缀,这一规则符合ARM官方汇编语法规范及LLVM汇编器的实现标准。
内容的提问来源于stack exchange,提问作者alex zhang
相关产品推荐
相关产品推荐

