[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