r200685 - Fix handling of -fno-function-sections, -fno-data-sections in clang driver.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Mon Feb 3 03:11:37 PST 2014


Author: eugenis
Date: Mon Feb  3 05:11:37 2014
New Revision: 200685

URL: http://llvm.org/viewvc/llvm-project?rev=200685&view=rev
Log:
Fix handling of -fno-function-sections, -fno-data-sections in clang driver.

Added:
    cfe/trunk/test/Driver/function-sections.c   (with props)
Modified:
    cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=200685&r1=200684&r2=200685&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Mon Feb  3 05:11:37 2014
@@ -2653,8 +2653,15 @@ void Clang::ConstructJob(Compilation &C,
     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);
 

Added: cfe/trunk/test/Driver/function-sections.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/function-sections.c?rev=200685&view=auto
==============================================================================
--- cfe/trunk/test/Driver/function-sections.c (added)
+++ cfe/trunk/test/Driver/function-sections.c Mon Feb  3 05:11:37 2014
@@ -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
+

Propchange: cfe/trunk/test/Driver/function-sections.c
------------------------------------------------------------------------------
    svn:eol-style = LF





More information about the cfe-commits mailing list