[4.0 Branch] Fwd: [llvm] r295230 - AddressSanitizer: don't track swifterror memory addresses
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 16 13:29:36 PST 2017
r295377.
Thanks,
Hans
On Wed, Feb 15, 2017 at 2:43 PM, Arnold Schwaighofer via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> 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
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list