[all-commits] [llvm/llvm-project] cb3174: [clang][CodeGen] fix UB in aarch64 bfloat16 scalar...
nihui via All-commits
all-commits at lists.llvm.org
Mon Apr 29 05:18:59 PDT 2024
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: cb3174bd7895535d2f397695b5b20b1e90876997
https://github.com/llvm/llvm-project/commit/cb3174bd7895535d2f397695b5b20b1e90876997
Author: nihui <shuizhuyuanluo at 126.com>
Date: 2024-04-29 (Mon, 29 Apr 2024)
Changed paths:
M clang/include/clang/Basic/arm_neon.td
M clang/test/CodeGen/arm-bf16-convert-intrinsics.c
Log Message:
-----------
[clang][CodeGen] fix UB in aarch64 bfloat16 scalar conversion (#89062)
do not bitcast 16bit `bfloat16` to 32bit `int32_t` directly
bitcast to `int16_t`, and then upcast to `int32_t`
Fix ASAN runtime error when calling vcvtah_f32_bf16
`==21842==ERROR: AddressSanitizer: stack-buffer-overflow on address
0x007fda1dd063 at pc 0x005c0361c234 bp 0x007fda1dd030 sp 0x007fda1dd028
`
without patch
```c
__ai __attribute__((target("bf16"))) float32_t vcvtah_f32_bf16(bfloat16_t __p0) {
float32_t __ret;
bfloat16_t __reint = __p0;
int32_t __reint1 = *(int32_t *) &__reint << 16;
__ret = *(float32_t *) &__reint1;
return __ret;
}
```
with this patch
```c
__ai __attribute__((target("bf16"))) float32_t vcvtah_f32_bf16(bfloat16_t __p0) {
float32_t __ret;
bfloat16_t __reint = __p0;
int32_t __reint1 = (int32_t)(*(int16_t *) &__reint) << 16;
__ret = *(float32_t *) &__reint1;
return __ret;
}
```
fix issue https://github.com/llvm/llvm-project/issues/61983
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list