From 165bab47895aec8bedad5678b669f98facbe5595 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Thu, 20 Oct 2011 10:56:08 +0000 Subject: [PATCH] * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180242 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/back_end.adb | 6 +++++- gcc/ada/gcc-interface/trans.c | 4 ++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gnat.dg/source_ref1.adb | 6 ++++++ gcc/testsuite/gnat.dg/source_ref2.adb | 7 +++++++ 6 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/source_ref1.adb create mode 100644 gcc/testsuite/gnat.dg/source_ref2.adb diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index ff41f8e5f1a..8b0c58a2258 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2011-10-20 Eric Botcazou + + * 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 Dodji Seketeli diff --git a/gcc/ada/back_end.adb b/gcc/ada/back_end.adb index a089f3862c4..b6ad263c232 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 69c66d1b150..ba47a7e373e 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 709fae4848c..654beee233e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-10-20 Eric Botcazou + + * gnat.dg/source_ref1.adb: New test. + * gnat.dg/source_ref2.adb: Likewise. + 2011-10-19 Paolo Carlini 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 00000000000..fd450cc45db --- /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 00000000000..cc2d57655e2 --- /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; -- 2.11.0