On Wed, May 03, 2006 at 12:29:17PM +0200, Bernd Schmidt wrote: > Does anyone find the use of #line in insn-recog.c actually useful? It > seems to make debugging recog() impossible.
Try this patch. It adds #line directives to insn-recog.c and other generated files to revert the ones already there. It should improve debugging. A few notes, though: 1) The line numbers are limited to 32767. I simply haven't found a trivially easy way of fixing that. 2) The change to genrecog.c was added when I saw your message. 3) No testing on other backends than i386 and my ongoing i8086 one. 4) Lines longer than 80 chars. 5) The paperwork isn't done yet. Index: gcc/Makefile.in =================================================================== --- gcc/Makefile.in (revision 112877) +++ gcc/Makefile.in (working copy) @@ -2711,7 +2713,9 @@ $(simple_generated_c:insn-%.c=s-%): s-%: build/gen%$(build_exeext) \ $(MD_DEPS) insn-conditions.md $(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \ - insn-conditions.md > tmp-$*.c + insn-conditions.md \ + | awk '/^LINE$$/ { if (FNR < 32767) print "#line", FNR + 1, "\"'$(objdir)'/insn-'$*'.c\""; next; } { print; }' \ + > tmp-$*.c $(SHELL) $(srcdir)/../move-if-change tmp-$*.c insn-$*.c $(STAMP) s-$* @@ -2786,7 +2790,9 @@ tm-constrs.h: s-constrs-h; @true s-preds: $(MD_DEPS) build/genpreds$(build_exeext) - $(RUN_GEN) build/genpreds$(build_exeext) $(md_file) > tmp-preds.c + $(RUN_GEN) build/genpreds$(build_exeext) $(md_file) \ + | awk '/^LINE$$/ { if (FNR < 32767) print "#line", FNR + 1, "\"'$(objdir)'/insn-preds.c\""; next; } { print; }' \ + > tmp-preds.c $(SHELL) $(srcdir)/../move-if-change tmp-preds.c insn-preds.c $(STAMP) s-preds @@ -2796,7 +2802,9 @@ $(STAMP) s-preds-h s-constrs-h: $(MD_DEPS) build/genpreds$(build_exeext) - $(RUN_GEN) build/genpreds$(build_exeext) -c $(md_file) > tmp-constrs.h + $(RUN_GEN) build/genpreds$(build_exeext) -c $(md_file) \ + | awk '/^LINE$$/ { if (FNR < 32767) print "#line", FNR + 1, "\"'$(objdir)'/tm-constrs.h\""; next; } { print; }' \ + > tmp-constrs.h $(SHELL) $(srcdir)/../move-if-change tmp-constrs.h tm-constrs.h $(STAMP) s-constrs-h Index: gcc/genattrtab.c =================================================================== --- gcc/genattrtab.c (revision 112877) +++ gcc/genattrtab.c (working copy) @@ -3770,7 +3770,7 @@ printf ("%sif ", first_if ? "" : "else "); first_if = 0; write_test_expr (testexp, 0); - printf ("\n"); + printf ("\nLINE\n"); write_indent (indent + 2); printf ("{\n"); Index: gcc/genemit.c =================================================================== --- gcc/genemit.c (revision 112877) +++ gcc/genemit.c (working copy) @@ -511,6 +511,7 @@ is generated. */ print_rtx_ptr_loc (XSTR (expand, 3)); printf ("%s\n", XSTR (expand, 3)); + puts ("LINE"); /* Output code to copy the arguments back out of `operands' (unless we aren't going to use them at all). */ @@ -634,6 +635,7 @@ { print_rtx_ptr_loc (XSTR (split, 3)); printf ("%s\n", XSTR (split, 3)); + puts ("LINE"); } /* Output code to copy the arguments back out of `operands' */ Index: gcc/genoutput.c =================================================================== --- gcc/genoutput.c (revision 112877) +++ gcc/genoutput.c (working copy) @@ -674,6 +674,7 @@ puts ("{"); print_rtx_ptr_loc (template); puts (template + 1); + puts ("LINE"); puts ("}"); } Index: gcc/genpreds.c =================================================================== --- gcc/genpreds.c (revision 112877) +++ gcc/genpreds.c (working copy) @@ -188,7 +188,7 @@ fputs (p->c_block, stdout); else printf ("{\n %s\n}", p->c_block); - fputs ("\n\n", stdout); + fputs ("\nLINE\n\n", stdout); } /* Given a predicate expression EXP, from form NAME, determine whether @@ -536,7 +536,7 @@ "{\n return ", p->name); write_predicate_expr (p->exp); - fputs (";\n}\n\n", stdout); + fputs (";\nLINE\n}\n\n", stdout); } /* Constraints fall into two categories: register constraints @@ -998,7 +998,7 @@ fputs (" return ", stdout); write_predicate_expr (c->exp); - fputs (";\n}\n", stdout); + fputs (";\nLINE\n}\n", stdout); } puts ("#endif /* tm-constrs.h */"); } @@ -1049,7 +1049,7 @@ { printf (" case CONSTRAINT_%s:\n return ", c->c_name); write_predicate_expr (c->exp); - fputs (";\n\n", stdout); + fputs (";\nLINE\n\n", stdout); } puts (" default: break;\n" Index: gcc/genrecog.c =================================================================== --- gcc/genrecog.c (revision 112877) +++ gcc/genrecog.c (working copy) @@ -2129,6 +2129,7 @@ case DT_c_test: print_c_condition (p->u.c_test); + puts ("\nLINE"); break; case DT_accept_insn: -- Rask Ingemann Lambertsen