1+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
12; RUN: opt < %s -passes=inferattrs,alloc-token -alloc-token-mode=increment -S | FileCheck %s
23
34target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
@@ -13,72 +14,86 @@ declare void @_ZdlPv(ptr)
1314declare i32 @foobar (i64 )
1415
1516; Test basic allocation call rewriting
16- ; CHECK-LABEL: @test_basic_rewriting
1717define ptr @test_basic_rewriting () sanitize_alloc_token {
18+ ; CHECK-LABEL: define ptr @test_basic_rewriting(
19+ ; CHECK-SAME: ) #[[ATTR5:[0-9]+]] {
20+ ; CHECK-NEXT: [[ENTRY:.*:]]
21+ ; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__alloc_token_malloc(i64 64, i64 0)
22+ ; CHECK-NEXT: [[TMP1:%.*]] = call ptr @__alloc_token_calloc(i64 8, i64 8, i64 1)
23+ ; CHECK-NEXT: [[TMP2:%.*]] = call ptr @__alloc_token_realloc(ptr [[TMP0]], i64 128, i64 2)
24+ ; CHECK-NEXT: ret ptr [[TMP2]]
25+ ;
1826entry:
19- ; CHECK: [[PTR1:%[0-9]]] = call ptr @__alloc_token_malloc(i64 64, i64 0)
20- ; CHECK: call ptr @__alloc_token_calloc(i64 8, i64 8, i64 1)
21- ; CHECK: call ptr @__alloc_token_realloc(ptr [[PTR1]], i64 128, i64 2)
22- ; CHECK-NOT: call ptr @malloc(
23- ; CHECK-NOT: call ptr @calloc(
24- ; CHECK-NOT: call ptr @realloc(
2527 %ptr1 = call ptr @malloc (i64 64 )
2628 %ptr2 = call ptr @calloc (i64 8 , i64 8 )
2729 %ptr3 = call ptr @realloc (ptr %ptr1 , i64 128 )
2830 ret ptr %ptr3
2931}
3032
3133; Test C++ operator rewriting
32- ; CHECK-LABEL: @test_cpp_operators
3334define ptr @test_cpp_operators () sanitize_alloc_token {
35+ ; CHECK-LABEL: define ptr @test_cpp_operators(
36+ ; CHECK-SAME: ) #[[ATTR5]] {
37+ ; CHECK-NEXT: [[ENTRY:.*:]]
38+ ; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__alloc_token_Znwm(i64 32, i64 3)
39+ ; CHECK-NEXT: [[TMP1:%.*]] = call ptr @__alloc_token_Znam(i64 64, i64 4)
40+ ; CHECK-NEXT: ret ptr [[TMP0]]
41+ ;
3442entry:
35- ; CHECK: call ptr @__alloc_token_Znwm(i64 32, i64 3)
36- ; CHECK: call ptr @__alloc_token_Znam(i64 64, i64 4)
37- ; CHECK-NOT: call ptr @_Znwm(
38- ; CHECK-NOT: call ptr @_Znam(
3943 %ptr1 = call ptr @_Znwm (i64 32 )
4044 %ptr2 = call ptr @_Znam (i64 64 )
4145 ret ptr %ptr1
4246}
4347
4448; Functions without sanitize_alloc_token do not get instrumented
45- ; CHECK-LABEL: @without_attribute
4649define ptr @without_attribute () {
50+ ; CHECK-LABEL: define ptr @without_attribute() {
51+ ; CHECK-NEXT: [[ENTRY:.*:]]
52+ ; CHECK-NEXT: [[PTR:%.*]] = call ptr @malloc(i64 16)
53+ ; CHECK-NEXT: ret ptr [[PTR]]
54+ ;
4755entry:
48- ; CHECK: call ptr @malloc(i64 16)
49- ; CHECK-NOT: call ptr @__alloc_token_malloc
5056 %ptr = call ptr @malloc (i64 16 )
5157 ret ptr %ptr
5258}
5359
5460; Test that free/delete are untouched
55- ; CHECK-LABEL: @test_free_untouched
5661define void @test_free_untouched (ptr %ptr ) sanitize_alloc_token {
62+ ; CHECK-LABEL: define void @test_free_untouched(
63+ ; CHECK-SAME: ptr [[PTR:%.*]]) #[[ATTR5]] {
64+ ; CHECK-NEXT: [[ENTRY:.*:]]
65+ ; CHECK-NEXT: call void @free(ptr [[PTR]])
66+ ; CHECK-NEXT: call void @_ZdlPv(ptr [[PTR]])
67+ ; CHECK-NEXT: ret void
68+ ;
5769entry:
58- ; CHECK: call void @free(ptr %ptr)
59- ; CHECK: call void @_ZdlPv(ptr %ptr)
60- ; CHECK-NOT: call ptr @__alloc_token_
6170 call void @free (ptr %ptr )
6271 call void @_ZdlPv (ptr %ptr )
6372 ret void
6473}
6574
6675; Non-allocation functions are untouched
67- ; CHECK-LABEL: @no_allocations
6876define i32 @no_allocations (i32 %x ) sanitize_alloc_token {
77+ ; CHECK-LABEL: define i32 @no_allocations(
78+ ; CHECK-SAME: i32 [[X:%.*]]) #[[ATTR5]] {
79+ ; CHECK-NEXT: [[ENTRY:.*:]]
80+ ; CHECK-NEXT: [[RESULT:%.*]] = call i32 @foobar(i64 42)
81+ ; CHECK-NEXT: ret i32 [[RESULT]]
82+ ;
6983entry:
70- ; CHECK: call i32 @foobar
71- ; CHECK-NOT: call i32 @__alloc_token_
7284 %result = call i32 @foobar (i64 42 )
7385 ret i32 %result
7486}
7587
7688; Test that tail calls are preserved
77- ; CHECK-LABEL: @test_tail_call_preserved
7889define ptr @test_tail_call_preserved () sanitize_alloc_token {
90+ ; CHECK-LABEL: define ptr @test_tail_call_preserved(
91+ ; CHECK-SAME: ) #[[ATTR5]] {
92+ ; CHECK-NEXT: [[ENTRY:.*:]]
93+ ; CHECK-NEXT: [[TMP0:%.*]] = tail call ptr @__alloc_token_malloc(i64 42, i64 5)
94+ ; CHECK-NEXT: ret ptr [[TMP0]]
95+ ;
7996entry:
80- ; CHECK: tail call ptr @__alloc_token_malloc(i64 42, i64 5)
81- ; CHECK-NOT: tail call ptr @malloc(
8297 %result = tail call ptr @malloc (i64 42 )
8398 ret ptr %result
8499}
0 commit comments