]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix line number data for PIC register setup code.
authorTom de Vries <tom@codesourcery.com>
Mon, 28 Oct 2013 09:13:12 +0000 (09:13 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Mon, 28 Oct 2013 09:13:12 +0000 (09:13 +0000)
2013-10-28  Tom de Vries  <tom@codesourcery.com>

* cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn.
Don't commit insertions after NOTE_INSN_FUNCTION_BEG.

* gcc.target/arm/require-pic-register-loc.c: New test.

From-SVN: r204121

gcc/ChangeLog
gcc/cfgexpand.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/require-pic-register-loc.c [new file with mode: 0644]

index 6523c77d4af23a18c9ff600b742d95e5a9846ee2..061a70e7c066fbeb9d98dc8d5c49771783510368 100644 (file)
@@ -1,3 +1,8 @@
+2013-10-28  Tom de Vries  <tom@codesourcery.com>
+
+       * cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn.
+       Don't commit insertions after NOTE_INSN_FUNCTION_BEG.
+
 2013-10-26  Uros Bizjak  <ubizjak@gmail.com>
 
        Backport from mainline
index 10bacda2c8307564599a1cefbf070e815b7c9e86..832d40a854c0fa4a3b1281a99136099e7a811e3b 100644 (file)
@@ -4619,14 +4619,18 @@ gimple_expand_cfg (void)
          if (e->insns.r)
            {
              rebuild_jump_labels_chain (e->insns.r);
-             /* Avoid putting insns before parm_birth_insn.  */
+             /* Put insns after parm birth, but before
+                NOTE_INSNS_FUNCTION_BEG.  */
              if (e->src == ENTRY_BLOCK_PTR
-                 && single_succ_p (ENTRY_BLOCK_PTR)
-                 && parm_birth_insn)
+                 && single_succ_p (ENTRY_BLOCK_PTR))
                {
                  rtx insns = e->insns.r;
                  e->insns.r = NULL_RTX;
-                 emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
+                 if (NOTE_P (parm_birth_insn)
+                     && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG)
+                   emit_insn_before_noloc (insns, parm_birth_insn, e->dest);
+                 else
+                   emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
                }
              else
                commit_one_edge_insertion (e);
index b5f751ac86079c66f3a55905b5b402f5e73f64c3..f3a6a238fbfeea4a623c1c38540529cbd3aca240 100644 (file)
@@ -1,3 +1,7 @@
+2013-10-28  Tom de Vries  <tom@codesourcery.com>
+
+       * gcc.target/arm/require-pic-register-loc.c: New test.
+
 2013-10-26  Uros Bizjak  <ubizjak@gmail.com>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c b/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
new file mode 100644 (file)
index 0000000..bd85e86
--- /dev/null
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-options "-g -fPIC" } */
+
+void *v;
+void a (void *x) { }
+void b (void) { }
+                       /* line 7.  */
+int                    /* line 8.  */
+main (int argc)        /* line 9.  */
+{                      /* line 10.  */
+  if (argc == 12345)   /* line 11.  */
+    {
+      a (v);
+      return 1;
+    }
+  b ();
+
+  return 0;
+}
+
+/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */
+/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */
+/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */
+
+/* The loc at the start of the prologue.  */
+/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */
+
+/* The loc at the end of the prologue, with the first user line.  */
+/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */