]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/85984 (ICE in create_pseudo_cfg, at dwarf2cfi.c:2874)
authorJakub Jelinek <jakub@redhat.com>
Thu, 31 May 2018 19:49:54 +0000 (21:49 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 31 May 2018 19:49:54 +0000 (21:49 +0200)
PR target/85984
* bb-reorder.c (pass_partition_blocks::gate): Return false for
functions with naked attribute.

* gcc.target/i386/pr85984.c: New test.

From-SVN: r261037

gcc/ChangeLog
gcc/bb-reorder.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr85984.c [new file with mode: 0644]

index a4563e00b8f7f489a134c6a878c8e0f080697607..09c8b7cdd9423936069a3e0318d1575c09e19948 100644 (file)
@@ -1,3 +1,9 @@
+2018-05-31  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/85984
+       * bb-reorder.c (pass_partition_blocks::gate): Return false for
+       functions with naked attribute.
+
 2018-05-31  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/sse.md (avx_vec_concat<mode>):
index 6f2ad5a522058333015ee24aa96d50d86856d70b..d1019d01d0991831c5c407f6e0d84405d8f77802 100644 (file)
@@ -2928,8 +2928,8 @@ pass_partition_blocks::gate (function *fun)
 {
   /* The optimization to partition hot/cold basic blocks into separate
      sections of the .o file does not work well with linkonce or with
-     user defined section attributes.  Don't call it if either case
-     arises.  */
+     user defined section attributes or with naked attribute.  Don't call
+     it if either case arises.  */
   return (flag_reorder_blocks_and_partition
          && optimize
          /* See pass_reorder_blocks::gate.  We should not partition if
@@ -2937,6 +2937,7 @@ pass_partition_blocks::gate (function *fun)
          && optimize_function_for_speed_p (fun)
          && !DECL_COMDAT_GROUP (current_function_decl)
          && !lookup_attribute ("section", DECL_ATTRIBUTES (fun->decl))
+         && !lookup_attribute ("naked", DECL_ATTRIBUTES (fun->decl))
          /* Workaround a bug in GDB where read_partial_die doesn't cope
             with DIEs with DW_AT_ranges, see PR81115.  */
          && !(in_lto_p && MAIN_NAME_P (DECL_NAME (fun->decl))));
index b414492dfb2978285edb6a807437d4c2d3e9ba48..e0745e08fc812291d154f119fd80be3c22479c21 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-31  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/85984
+       * gcc.target/i386/pr85984.c: New test.
+
 2018-05-31  Martin Sebor  <msebor@redhat.com>
 
        PR c/82063
diff --git a/gcc/testsuite/gcc.target/i386/pr85984.c b/gcc/testsuite/gcc.target/i386/pr85984.c
new file mode 100644 (file)
index 0000000..23dd53d
--- /dev/null
@@ -0,0 +1,18 @@
+/* PR target/85984 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int foo (void);
+
+void __attribute__((naked))
+bar (void)
+{
+  if (!foo ())
+    __builtin_abort ();
+}
+
+void
+baz (void)
+{
+  bar ();
+}