Mark -fstack-protect as optimization flag.
authorMartin Liska <mliska@suse.cz>
Wed, 29 Jun 2016 12:12:56 +0000 (14:12 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Wed, 29 Jun 2016 12:12:56 +0000 (12:12 +0000)
PR middle-end/71585
* common.opt (flag_stack_protect): Mark the flag as optimization
flag.
* ipa-inline-transform.c (inline_call): Remove unnecessary call
of build_optimization_node.
* gcc.dg/pr71585.c: New test.
* gcc.dg/pr71585-2.c: New test.
* gcc.dg/pr71585-3.c: New test.

From-SVN: r237845

gcc/ChangeLog
gcc/common.opt
gcc/ipa-inline-transform.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr71585-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr71585-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr71585.c [new file with mode: 0644]

index a086524676949c56077e275058a43173aeddb52b..1c63e41f51559baa3784a3ece7ac04fe14dcb752 100644 (file)
@@ -1,3 +1,11 @@
+2016-06-29  Martin Liska  <mliska@suse.cz>
+
+       PR middle-end/71585
+       * common.opt (flag_stack_protect): Mark the flag as optimization
+       flag.
+       * ipa-inline-transform.c (inline_call): Remove unnecessary call
+       of build_optimization_node.
+
 2016-06-29  Yuri Rumyantsev  <ysrumyan@gmail.com>
 
        PR tree-optimization/70729
index 5d90385eaead0c13f1a018205a5bd5a77965c79d..a7c5125bf08141524e5782d85b94f2028f9f3dd4 100644 (file)
@@ -2221,19 +2221,19 @@ Common RejectNegative Joined Var(common_deferred_options) Defer
 -fstack-limit-symbol=<name>    Trap if the stack goes past symbol <name>.
 
 fstack-protector
-Common Report Var(flag_stack_protect, 1) Init(-1)
+Common Report Var(flag_stack_protect, 1) Init(-1) Optimization
 Use propolice as a stack protection method.
 
 fstack-protector-all
-Common Report RejectNegative Var(flag_stack_protect, 2) Init(-1)
+Common Report RejectNegative Var(flag_stack_protect, 2) Init(-1) Optimization
 Use a stack protection method for every function.
 
 fstack-protector-strong
-Common Report RejectNegative Var(flag_stack_protect, 3) Init(-1)
+Common Report RejectNegative Var(flag_stack_protect, 3) Init(-1) Optimization
 Use a smart stack protection method for certain functions.
 
 fstack-protector-explicit
-Common Report RejectNegative Var(flag_stack_protect, 4)
+Common Report RejectNegative Var(flag_stack_protect, 4) Optimization
 Use stack protection method only for functions with the stack_protect attribute.
 
 fstack-usage
index f6b7d41d47e8e1df41cd8843cc443a5fc738fc29..9ac1efc91920d66d64f5ddd4898fa048836a7bc4 100644 (file)
@@ -342,10 +342,10 @@ inline_call (struct cgraph_edge *e, bool update_original,
       if (dump_file)
        fprintf (dump_file, "Dropping flag_strict_aliasing on %s:%i\n",
                 to->name (), to->order);
-      build_optimization_node (&opts);
       DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl)
         = build_optimization_node (&opts);
     }
+
   inline_summary *caller_info = inline_summaries->get (to);
   inline_summary *callee_info = inline_summaries->get (callee);
   if (!caller_info->fp_expressions && callee_info->fp_expressions)
@@ -402,7 +402,6 @@ inline_call (struct cgraph_edge *e, bool update_original,
          if (dump_file)
            fprintf (dump_file, "Copying FP flags from %s:%i to %s:%i\n",
                     callee->name (), callee->order, to->name (), to->order);
-         build_optimization_node (&opts);
          DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl)
             = build_optimization_node (&opts);
        }
index 471e39a24e4f5489110013eefd8932f970341e0b..6e132a25448bd6cef205130574a0e42667e8a824 100644 (file)
@@ -1,3 +1,9 @@
+2016-06-29  Martin Liska  <mliska@suse.cz>
+
+       * gcc.dg/pr71585.c: New test.
+       * gcc.dg/pr71585-2.c: New test.
+       * gcc.dg/pr71585-3.c: New test.
+
 2016-06-29  Yuri Rumyantsev  <ysrumyan@gmail.com>
 
        PR tree-optimization/70729
diff --git a/gcc/testsuite/gcc.dg/pr71585-2.c b/gcc/testsuite/gcc.dg/pr71585-2.c
new file mode 100644 (file)
index 0000000..c3010da
--- /dev/null
@@ -0,0 +1,23 @@
+/* Test that stack protection is done on chosen functions. */
+
+/* { dg-do compile { target i?86-*-* x86_64-*-* rs6000-*-* s390x-*-* } } */
+/* { dg-options "-O2 -fstack-protector-all" } */
+
+/* This test checks the presence of __stack_chk_fail function in assembler.
+ * Compiler generates _stack_chk_fail_local (wrapper) calls instead for PIC.
+ */
+/* { dg-require-effective-target nonpic } */
+
+static int foo()
+{
+  return 0;
+}
+
+#pragma GCC push_options
+#pragma GCC optimize ("-fno-stack-protector")
+
+int main() { foo (); }
+
+#pragma GCC pop_options
+
+/* { dg-final { scan-assembler-times "stack_chk_fail" 0 } } */
diff --git a/gcc/testsuite/gcc.dg/pr71585-3.c b/gcc/testsuite/gcc.dg/pr71585-3.c
new file mode 100644 (file)
index 0000000..5632915
--- /dev/null
@@ -0,0 +1,24 @@
+/* Test that stack protection is done on chosen functions. */
+
+/* { dg-do compile { target i?86-*-* x86_64-*-* rs6000-*-* s390x-*-* } } */
+/* { dg-options "-O2 -fstack-protector-all" } */
+
+/* This test checks the presence of __stack_chk_fail function in assembler.
+ * Compiler generates _stack_chk_fail_local (wrapper) calls instead for PIC.
+ */
+/* { dg-require-effective-target nonpic } */
+
+
+#pragma GCC push_options
+#pragma GCC optimize ("-fno-stack-protector")
+
+int foo()
+{
+  return 0;
+}
+
+#pragma GCC pop_options
+
+int main() { foo (); }
+
+/* { dg-final { scan-assembler-times "stack_chk_fail" 1 } } */
diff --git a/gcc/testsuite/gcc.dg/pr71585.c b/gcc/testsuite/gcc.dg/pr71585.c
new file mode 100644 (file)
index 0000000..444aaa1
--- /dev/null
@@ -0,0 +1,23 @@
+/* Test that stack protection is done on chosen functions. */
+
+/* { dg-do compile { target i?86-*-* x86_64-*-* rs6000-*-* s390x-*-* } } */
+/* { dg-options "-O2 -fstack-protector-all" } */
+
+/* This test checks the presence of __stack_chk_fail function in assembler.
+ * Compiler generates _stack_chk_fail_local (wrapper) calls instead for PIC.
+ */
+/* { dg-require-effective-target nonpic } */
+
+#pragma GCC push_options
+
+#pragma GCC optimize ("-fno-stack-protector")
+__attribute__((constructor)) void foo()
+{
+  asm ("");
+}
+
+#pragma GCC pop_options
+
+int main() { return 0; }
+
+/* { dg-final { scan-assembler-times "stack_chk_fail" 1 } } */