[PATCH] D123300: [Clang] Enable opaque pointers by default

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 12 06:01:34 PDT 2022


nikic added a comment.

Okay, I managed to reproduce this using the instructions from https://github.com/google/sanitizers/wiki/MemorySanitizerBootstrappingClang.

Reduced to these two variants for `-passes=msan`:

  target triple = "x86_64-unknown-linux-gnu"
  
  define void @test(i8* %p, i32* byval(i32) %p2) {
    %p2.i8 = bitcast i32* %p2 to i8*
    call void @llvm.memcpy.p0i8.p0i8.i64(i8* %p, i8* %p2.i8, i64 4, i1 false)
    ret void
  }
  
  declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i1)

  target triple = "x86_64-unknown-linux-gnu"
  
  define void @test(ptr %p, ptr byval(i32) %p2) {
    call void @llvm.memcpy.p0.p0.i64(i8* %p, i8* %p2, i64 4, i1 false)
    ret void
  } 
  
  declare void @llvm.memcpy.p0.p0.i64(i8*, i8*, i64, i1)

The second one does not initialize the shadow for the byval argument.

With typed pointers, this happens because a bitcast is present, which will attempt to fetch the shadow (https://github.com/llvm/llvm-project/blob/e810d558093cff40caaa1aff24d289c76c59916d/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp#L2050). While a plain memcpy does not attempt to fetch the shadow (https://github.com/llvm/llvm-project/blob/e810d558093cff40caaa1aff24d289c76c59916d/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp#L2586).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D123300/new/

https://reviews.llvm.org/D123300



More information about the llvm-commits mailing list