[4.0 Branch] Fwd: [llvm] r295230 - AddressSanitizer: don't track swifterror memory addresses

Arnold Schwaighofer via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 15 14:43:09 PST 2017


Hi Hans and Kostya,

And another one … Can we merge this into the 4.0 branch?

This affects only the swift calling convention and swifterror so should be reasonably safe.

Thank you!

> Begin forwarded message:
> 
> From: Arnold Schwaighofer via llvm-commits <llvm-commits at lists.llvm.org>
> Subject: [llvm] r295230 - AddressSanitizer: don't track swifterror memory addresses
> Date: February 15, 2017 at 12:43:43 PM PST
> To: llvm-commits at lists.llvm.org
> Reply-To: Arnold Schwaighofer <aschwaighofer at apple.com>
> 
> Author: arnolds
> Date: Wed Feb 15 14:43:43 2017
> New Revision: 295230
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=295230&view=rev
> Log:
> AddressSanitizer: don't track swifterror memory addresses
> 
> They are register promoted by ISel and so it makes no sense to treat them as
> memory.
> 
> Inserting calls to the thread sanitizer would also generate invalid IR.
> 
> You would hit:
> 
> "swifterror value can only be loaded and stored from, or as a swifterror
> argument!"
> 
> Modified:
>    llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>    llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll
> 
> Modified: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=295230&r1=295229&r2=295230&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Wed Feb 15 14:43:43 2017
> @@ -1013,7 +1013,9 @@ bool AddressSanitizer::isInterestingAllo
>        (!ClSkipPromotableAllocas || !isAllocaPromotable(&AI)) &&
>        // inalloca allocas are not treated as static, and we don't want
>        // dynamic alloca instrumentation for them as well.
> -       !AI.isUsedWithInAlloca());
> +       !AI.isUsedWithInAlloca() &&
> +       // swifterror allocas are register promoted by ISel
> +       !AI.isSwiftError());
> 
>   ProcessedAllocas[&AI] = IsInteresting;
>   return IsInteresting;
> @@ -1088,12 +1090,19 @@ Value *AddressSanitizer::isInterestingMe
>     }
>   }
> 
> -  // Do not instrument acesses from different address spaces; we cannot deal
> -  // with them.
>   if (PtrOperand) {
> +    // Do not instrument acesses from different address spaces; we cannot deal
> +    // with them.
>     Type *PtrTy = cast<PointerType>(PtrOperand->getType()->getScalarType());
>     if (PtrTy->getPointerAddressSpace() != 0)
>       return nullptr;
> +
> +    // Ignore swifterror addresses.
> +    // swifterror memory addresses are mem2reg promoted by instruction
> +    // selection. As such they cannot have regular uses like an instrumentation
> +    // function and it makes no sense to track them as memory.
> +    if (PtrOperand->isSwiftError())
> +      return nullptr;
>   }
> 
>   // Treat memory accesses to promotable allocas as non-interesting since they
> 
> Modified: llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll?rev=295230&r1=295229&r2=295230&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll (original)
> +++ llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll Wed Feb 15 14:43:43 2017
> @@ -170,6 +170,32 @@ define void @memintr_test(i8* %a, i8* %b
> ; CHECK: __asan_memcpy
> ; CHECK: ret void
> 
> +; CHECK-LABEL: @test_swifterror
> +; CHECK-NOT: __asan_report_load
> +; CHECK: ret void
> +define void @test_swifterror(i8** swifterror) sanitize_address {
> +  %swifterror_ptr_value = load i8*, i8** %0
> +  ret void
> +}
> +
> +; CHECK-LABEL: @test_swifterror_2
> +; CHECK-NOT: __asan_report_store
> +; CHECK: ret void
> +define void @test_swifterror_2(i8** swifterror) sanitize_address {
> +  store i8* null, i8** %0
> +  ret void
> +}
> +
> +; CHECK-LABEL: @test_swifterror_3
> +; CHECK-NOT: __asan_report_store
> +; CHECK: ret void
> +define void @test_swifterror_3() sanitize_address {
> +  %swifterror_addr = alloca swifterror i8*
> +  store i8* null, i8** %swifterror_addr
> +  call void @test_swifterror_2(i8** swifterror %swifterror_addr)
> +  ret void
> +}
> +
> ; CHECK: define internal void @asan.module_ctor()
> ; CHECK: call void @__asan_init()
> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170215/e6551457/attachment.html>


More information about the llvm-commits mailing list