1$ cat main.cpp 2#include <stdio.h> 3 4static void Foo(void) 5{ 6 typedef struct { 7 int x1; 8 int x2; 9 } FOO_VAR_TYPE; 10 static FOO_VAR_TYPE MyDummyVar __attribute__((aligned(4), used, section("TAD_VIRTUAL, TAD_DUMMY_DATA"), nocommon)); 11 printf("Foo called"); 12} 13 14int main() 15{ 16 Foo(); 17 return 1; 18} 19 20$ clang++ -O2 -g main.cpp -c -o main.o 21$ clang++ main.o -o main.out 22 23RUN: dsymutil --linker parallel -oso-prepend-path %p/../../Inputs %p/../../Inputs/private/tmp/keep_func/main.out -o %t.omit.dSYM 24RUN: dsymutil --linker parallel -oso-prepend-path %p/../../Inputs %p/../../Inputs/private/tmp/keep_func/main.out -o %t.keep.dSYM -keep-function-for-static 25RUN: llvm-dwarfdump %t.omit.dSYM | FileCheck %s --check-prefix OMIT 26RUN: llvm-dwarfdump %t.keep.dSYM | FileCheck %s --check-prefix KEEP 27 28KEEP: DW_AT_name ("x1") 29KEEP: DW_AT_name ("x2") 30KEEP: DW_AT_name ("FOO_VAR_TYPE") 31KEEP: DW_AT_name ("MyDummyVar") 32 33OMIT-NOT: DW_AT_name ("MyDummyVar") 34OMIT-NOT: DW_AT_name ("FOO_VAR_TYPE") 35OMIT-NOT: DW_AT_name ("x1") 36OMIT-NOT: DW_AT_name ("x2") 37