diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/back_end.adb | 6 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/trans.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/source_ref1.adb | 6 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/source_ref2.adb | 7 |
6 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index ff41f8e..8b0c58a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2011-10-20 Eric Botcazou <ebotcazou@adacore.com> + + * back_end.adb (Call_Back_End): Pass the maximum logical line number + instead of the maximum physical line number to gigi. + * gcc-interface/trans.c (Sloc_to_locus): Cope with line zero. + 2011-10-16 Tom Tromey <tromey@redhat.com> Dodji Seketeli <dodji@redhat.com> diff --git a/gcc/ada/back_end.adb b/gcc/ada/back_end.adb index a089f38..b6ad263 100644 --- a/gcc/ada/back_end.adb +++ b/gcc/ada/back_end.adb @@ -114,9 +114,13 @@ package body Back_End is return; end if; + -- The back end needs to know the maximum line number that can appear + -- in a Sloc, in other words the maximum logical line number. + for J in 1 .. Last_Source_File loop File_Info_Array (J).File_Name := Full_Debug_Name (J); - File_Info_Array (J).Num_Source_Lines := Num_Source_Lines (J); + File_Info_Array (J).Num_Source_Lines := + Nat (Physical_To_Logical (Last_Source_Line (J), J)); end loop; if Generate_SCIL then diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 69c66d1..ba47a7e 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -8393,6 +8393,10 @@ Sloc_to_locus (Source_Ptr Sloc, location_t *locus) Column_Number column = Get_Column_Number (Sloc); struct line_map *map = LINEMAPS_ORDINARY_MAP_AT (line_table, file - 1); + /* We can have zero if pragma Source_Reference is in effect. */ + if (line < 1) + line = 1; + /* Translate the location. */ *locus = linemap_position_for_line_and_column (map, line, column); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 709fae4..654beee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-10-20 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/source_ref1.adb: New test. + * gnat.dg/source_ref2.adb: Likewise. + 2011-10-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/13657 diff --git a/gcc/testsuite/gnat.dg/source_ref1.adb b/gcc/testsuite/gnat.dg/source_ref1.adb new file mode 100644 index 0000000..fd450cc --- /dev/null +++ b/gcc/testsuite/gnat.dg/source_ref1.adb @@ -0,0 +1,6 @@ +pragma Source_Reference (3, "p1.adb"); + +procedure Source_Ref1 is +begin + null; +end; diff --git a/gcc/testsuite/gnat.dg/source_ref2.adb b/gcc/testsuite/gnat.dg/source_ref2.adb new file mode 100644 index 0000000..cc2d576 --- /dev/null +++ b/gcc/testsuite/gnat.dg/source_ref2.adb @@ -0,0 +1,7 @@ +pragma Source_Reference (1, "p2.adb"); + +procedure Source_Ref2 is +pragma Source_Reference (2, "p2.adb"); +begin + null; +end; |