| $ 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") |