$ cat main.cpp #include <stdio.h> static void Foo(void) { typedef struct { int x1; int x2; } FOO_VAR_TYPE; static FOO_VAR_TYPE MyDummyVar __attribute__((aligned(4), used, section("TAD_VIRTUAL, TAD_DUMMY_DATA"), nocommon)); printf("Foo called"); } int main() { Foo(); return 1; } $ clang++ -O2 -g main.cpp -c -o main.o $ clang++ main.o -o main.out RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/keep_func/main.out -o %t.omit.dSYM RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/keep_func/main.out -o %t.keep.dSYM -keep-function-for-static RUN: llvm-dwarfdump %t.omit.dSYM | FileCheck %s --check-prefix OMIT RUN: llvm-dwarfdump %t.keep.dSYM | FileCheck %s --check-prefix KEEP KEEP: DW_AT_name ("MyDummyVar") KEEP: DW_AT_name ("FOO_VAR_TYPE") KEEP: DW_AT_name ("x1") KEEP: DW_AT_name ("x2") OMIT-NOT: DW_AT_name ("MyDummyVar") OMIT-NOT: DW_AT_name ("FOO_VAR_TYPE") OMIT-NOT: DW_AT_name ("x1") OMIT-NOT: DW_AT_name ("x2")