]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ipa-inline-transform.c (inline_call): Drop -fstrict-aliasing when inlining -fno-stric...
authorMartin Liska <mliska@suse.cz>
Fri, 20 Jan 2017 08:52:46 +0000 (09:52 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 20 Jan 2017 08:52:46 +0000 (08:52 +0000)
* ipa-inline-transform.c (inline_call): Drop -fstrict-aliasing when  inlining -fno-strict-aliasing into -fstrict-aliasing body.

From-SVN: r244690

gcc/ChangeLog
gcc/ipa-inline-transform.c

index 44e57619de11c18c0af3e9a0dbb66ba571233415..e92d48d6ef41e0a2b4bf020becc2267a0219b2a1 100644 (file)
@@ -1,3 +1,12 @@
+2017-01-20  Martin Liska  <mliska@suse.cz>
+
+       Backport from mainline
+       2016-01-01  Jan Hubicka  <hubicka@ucw.cz>
+
+       * ipa-inline-transform.c (inline_call): Drop
+       -fstrict-aliasing when  inlining -fno-strict-aliasing into
+       -fstrict-aliasing body.
+
 2017-01-20  Martin Liska  <mliska@suse.cz>
 
        Backport from mainline
index 5a628f39dd68b6c314e6ea19a25de0286497d54c..b160e9f139058da48a48d440c30782eb3ddad370 100644 (file)
@@ -341,6 +341,21 @@ inline_call (struct cgraph_edge *e, bool update_original,
   if (DECL_FUNCTION_PERSONALITY (callee->decl))
     DECL_FUNCTION_PERSONALITY (to->decl)
       = DECL_FUNCTION_PERSONALITY (callee->decl);
+  if (!opt_for_fn (callee->decl, flag_strict_aliasing)
+      && opt_for_fn (to->decl, flag_strict_aliasing))
+    {
+      struct gcc_options opts = global_options;
+
+      cl_optimization_restore (&opts,
+        TREE_OPTIMIZATION (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl)));
+      opts.x_flag_strict_aliasing = false;
+      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);
+    }
 
   /* If aliases are involved, redirect edge to the actual destination and
      possibly remove the aliases.  */