diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-02-03 11:11:37 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-02-03 11:11:37 +0000 |
commit | 9e7cb33b1761a486757616cace41fa7b977a448f (patch) | |
tree | 557080b3d029de12acf1127ec4e6dae9e7162534 /clang | |
parent | fe437f0a8f88bbed28a60cfc1b38b796ba2fef46 (diff) | |
download | bcm5719-llvm-9e7cb33b1761a486757616cace41fa7b977a448f.tar.gz bcm5719-llvm-9e7cb33b1761a486757616cace41fa7b977a448f.zip |
Fix handling of -fno-function-sections, -fno-data-sections in clang driver.
llvm-svn: 200685
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 11 | ||||
-rw-r--r-- | clang/test/Driver/function-sections.c | 62 |
2 files changed, 71 insertions, 2 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 10194b1dda7..3a8a2877579 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -2653,8 +2653,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-generate-type-units"); } - Args.AddAllArgs(CmdArgs, options::OPT_ffunction_sections); - Args.AddAllArgs(CmdArgs, options::OPT_fdata_sections); + if (Args.hasFlag(options::OPT_ffunction_sections, + options::OPT_fno_function_sections, false)) { + CmdArgs.push_back("-ffunction-sections"); + } + + if (Args.hasFlag(options::OPT_fdata_sections, + options::OPT_fno_data_sections, false)) { + CmdArgs.push_back("-fdata-sections"); + } Args.AddAllArgs(CmdArgs, options::OPT_finstrument_functions); diff --git a/clang/test/Driver/function-sections.c b/clang/test/Driver/function-sections.c new file mode 100644 index 00000000000..fe6d303e3ec --- /dev/null +++ b/clang/test/Driver/function-sections.c @@ -0,0 +1,62 @@ +// Test handling of -f(no-)function-sections and -f(no-)data-sections +// +// CHECK-FS: -ffunction-sections +// CHECK-NOFS-NOT: -ffunction-sections +// CHECK-DS: -fdata-sections +// CHECK-NODS-NOT: -fdata-sections + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: | FileCheck --check-prefix=CHECK-NOFS --check-prefix=CHECK-NODS %s + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -ffunction-sections \ +// RUN: | FileCheck --check-prefix=CHECK-FS %s + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -fno-function-sections \ +// RUN: | FileCheck --check-prefix=CHECK-NOFS %s + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -ffunction-sections -fno-function-sections \ +// RUN: | FileCheck --check-prefix=CHECK-NOFS %s + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -fno-function-sections -ffunction-sections \ +// RUN: | FileCheck --check-prefix=CHECK-FS %s + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -ffunction-sections -fno-function-sections -ffunction-sections \ +// RUN: | FileCheck --check-prefix=CHECK-FS %s + + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -fdata-sections \ +// RUN: | FileCheck --check-prefix=CHECK-DS %s + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -fno-data-sections \ +// RUN: | FileCheck --check-prefix=CHECK-NODS %s + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -fdata-sections -fno-data-sections \ +// RUN: | FileCheck --check-prefix=CHECK-NODS %s + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -fno-data-sections -fdata-sections \ +// RUN: | FileCheck --check-prefix=CHECK-DS %s + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: -fdata-sections -fno-data-sections -fdata-sections \ +// RUN: | FileCheck --check-prefix=CHECK-DS %s + |