+2015-11-09 Andreas Arnez <arnez@linux.vnet.ibm.com>
+
+ PR debug/67192
+ * c-typeck.c (c_finish_loop): For unconditional loops, set the
+ location of the backward-goto to the start of the loop body.
+
2015-11-09 Andreas Arnez <arnez@linux.vnet.ibm.com>
PR debug/67192
exit = fold_build3_loc (input_location,
COND_EXPR, void_type_node, cond, exit, t);
}
+ else
+ {
+ /* For the backward-goto's location of an unconditional loop
+ use the beginning of the body, or, if there is none, the
+ top of the loop. */
+ location_t loc = EXPR_LOCATION (expr_first (body));
+ if (loc == UNKNOWN_LOCATION)
+ loc = start_locus;
+ SET_EXPR_LOCATION (exit, loc);
+ }
add_stmt (top);
}
+2015-11-09 Andreas Arnez <arnez@linux.vnet.ibm.com>
+
+ PR debug/67192
+ * gcc.dg/guality/pr67192.c (f3, f4): New functions.
+ (main): Invoke them.
+
2015-11-09 Andreas Arnez <arnez@linux.vnet.ibm.com>
PR debug/67192
do_it (); /* { dg-final { gdb-test 39 "cnt" "10" } } */
}
+__attribute__((noinline, noclone)) static void
+f3 (void)
+{
+ for (;; do_it())
+ if (last ())
+ break;
+ do_it (); /* { dg-final { gdb-test 48 "cnt" "15" } } */
+}
+
+__attribute__((noinline, noclone)) static void
+f4 (void)
+{
+ while (1) /* { dg-final { gdb-test 54 "cnt" "15" } } */
+ if (last ())
+ break;
+ else
+ do_it ();
+ do_it (); /* { dg-final { gdb-test 59 "cnt" "20" } } */
+}
+
void (*volatile fnp1) (void) = f1;
void (*volatile fnp2) (void) = f2;
+void (*volatile fnp3) (void) = f3;
+void (*volatile fnp4) (void) = f4;
int
main ()
{
asm volatile ("" : : "r" (&fnp1) : "memory");
asm volatile ("" : : "r" (&fnp2) : "memory");
+ asm volatile ("" : : "r" (&fnp3) : "memory");
+ asm volatile ("" : : "r" (&fnp4) : "memory");
fnp1 ();
fnp2 ();
+ fnp3 ();
+ fnp4 ();
return 0;
}