[libcxx] [mlir] [llvm] [compiler-rt] [clang] [asan] Enable StackSafetyAnalysis by default (PR #77210)

Ulrich Weigand via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 19 06:56:22 PST 2024


uweigand wrote:

@MaskRay I've done a bit more analysis now, and what seems to be going on is that with stack safety analysis off, this check:
```
  char array[len];
  assert(!(reinterpret_cast<uintptr_t>(array) & 31L));
```
succeeds because the VLA allocation gets instrumented, and therefore the VLA address is guaranteed to be 32-byte aligned.

However, with stack safety analysis *on*, that analysis (correctly) detects that the VLA is actually never accessed, and therefore the allocation does not need be instrumented.  Because it is isn't instrumented, it remains a regular alloca without special alignment requirements.

Therefore, there is no guarantee that the assert will succeed.  If the incoming stack pointer happened to already be 32-byte aligned, it will succeed - otherwise (and that's the cases where we're seeing failures on s390x), it will not.

This seems to be a platform-independent bug that just happens to be visible only on some platforms sometimes.


https://github.com/llvm/llvm-project/pull/77210


More information about the cfe-commits mailing list