File indexing completed on 2025-01-19 08:22:20
0001 /* 0002 SPDX-FileCopyrightText: 2021 Milian Wolff <mail@milianw.de> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include <stdint.h> 0008 #include <stdlib.h> 0009 0010 // see upstream "documentation" at: 0011 // https://github.com/llvm-mirror/compiler-rt/blob/master/include/sanitizer/lsan_interface.h#L76 0012 __attribute__((used)) const char* __lsan_default_suppressions() 0013 { 0014 return "leak:foobar\nleak:^leak*Supp$\n"; 0015 } 0016 0017 inline void escape(void* p) 0018 { 0019 asm volatile("" : : "g"(p) : "memory"); 0020 } 0021 0022 __attribute__((noinline)) void* foobar() 0023 { 0024 void* ptr = malloc(1); 0025 escape(ptr); 0026 return ptr; 0027 } 0028 0029 __attribute__((noinline)) void* leak() 0030 { 0031 void* ptr = malloc(2); 0032 escape(ptr); 0033 return ptr; 0034 } 0035 0036 __attribute__((noinline)) void* leakFoo() 0037 { 0038 void* ptr = malloc(3); 0039 escape(ptr); 0040 return ptr; 0041 } 0042 0043 __attribute__((noinline)) void* leakFooSupp() 0044 { 0045 void* ptr = malloc(4); 0046 escape(ptr); 0047 return ptr; 0048 } 0049 0050 int main() 0051 { 0052 foobar(); 0053 leak(); 0054 leakFoo(); 0055 leakFooSupp(); 0056 return 0; 0057 }