File indexing completed on 2024-04-21 05:41:32

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 }