forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[asan] Do not instrument pointers with address space attributes
Do not instrument pointers with address space attributes since we cannot track them anyway. Instrumenting them results in false positives in ASan and a compiler crash in TSan. (The compiler should not crash in any case, but that's a different problem.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273339 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Showing
4 changed files
with
82 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
test/Instrumentation/AddressSanitizer/asan_address_space_attr.ll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
; RUN: opt < %s -asan -S | FileCheck %s | ||
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" | ||
target triple = "x86_64-apple-macosx10.11.0" | ||
|
||
; Checks that we do not instrument loads and stores comming from custom address space. | ||
; These result in invalid (false positive) reports. | ||
; int foo(int argc, const char * argv[]) { | ||
; void *__attribute__((address_space(256))) *gs_base = (((void * __attribute__((address_space(256))) *)0)); | ||
; void *somevalue = gs_base[-1]; | ||
; return somevalue; | ||
; } | ||
|
||
define i32 @foo(i32 %argc, i8** %argv) sanitize_address { | ||
entry: | ||
%retval = alloca i32, align 4 | ||
%argc.addr = alloca i32, align 4 | ||
%argv.addr = alloca i8**, align 8 | ||
%gs_base = alloca i8* addrspace(256)*, align 8 | ||
%somevalue = alloca i8*, align 8 | ||
store i32 0, i32* %retval, align 4 | ||
store i32 %argc, i32* %argc.addr, align 4 | ||
store i8** %argv, i8*** %argv.addr, align 8 | ||
store i8* addrspace(256)* null, i8* addrspace(256)** %gs_base, align 8 | ||
%0 = load i8* addrspace(256)*, i8* addrspace(256)** %gs_base, align 8 | ||
%arrayidx = getelementptr inbounds i8*, i8* addrspace(256)* %0, i64 -1 | ||
%1 = load i8*, i8* addrspace(256)* %arrayidx, align 8 | ||
store i8* %1, i8** %somevalue, align 8 | ||
%2 = load i8*, i8** %somevalue, align 8 | ||
%3 = ptrtoint i8* %2 to i32 | ||
ret i32 %3 | ||
} | ||
; CHECK-NOT: call void @__asan_report_load8 |
33 changes: 33 additions & 0 deletions
33
test/Instrumentation/ThreadSanitizer/tsan_address_space_attr.ll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
; RUN: opt < %s -tsan -S | FileCheck %s | ||
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" | ||
target triple = "x86_64-apple-macosx10.11.0" | ||
|
||
; Checks that we do not instrument loads and stores comming from custom address space. | ||
; These result in crashing the compiler. | ||
; int foo(int argc, const char * argv[]) { | ||
; void *__attribute__((address_space(256))) *gs_base = (((void * __attribute__((address_space(256))) *)0)); | ||
; void *somevalue = gs_base[-1]; | ||
; return somevalue; | ||
; } | ||
|
||
define i32 @foo(i32 %argc, i8** %argv) sanitize_thread { | ||
entry: | ||
%retval = alloca i32, align 4 | ||
%argc.addr = alloca i32, align 4 | ||
%argv.addr = alloca i8**, align 8 | ||
%gs_base = alloca i8* addrspace(256)*, align 8 | ||
%somevalue = alloca i8*, align 8 | ||
store i32 0, i32* %retval, align 4 | ||
store i32 %argc, i32* %argc.addr, align 4 | ||
store i8** %argv, i8*** %argv.addr, align 8 | ||
store i8* addrspace(256)* null, i8* addrspace(256)** %gs_base, align 8 | ||
%0 = load i8* addrspace(256)*, i8* addrspace(256)** %gs_base, align 8 | ||
%arrayidx = getelementptr inbounds i8*, i8* addrspace(256)* %0, i64 -1 | ||
%1 = load i8*, i8* addrspace(256)* %arrayidx, align 8 | ||
store i8* %1, i8** %somevalue, align 8 | ||
%2 = load i8*, i8** %somevalue, align 8 | ||
%3 = ptrtoint i8* %2 to i32 | ||
ret i32 %3 | ||
} | ||
; CHECK-NOT: call void @__tsan_read | ||
; CHECK-NOT: addrspacecast |