summaryrefslogtreecommitdiffstats
path: root/gcc/ada/lib.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-03 08:22:52 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-03 08:22:52 +0000
commit23255a5b14416256c1b36986cdc40840ce5ff434 (patch)
treeeeabf64a1a78064507c612cff6b0b9e20b698374 /gcc/ada/lib.adb
parentbdf265a31f4b0fb27b3bb80337b3050f4ed7725d (diff)
downloadppe42-gcc-23255a5b14416256c1b36986cdc40840ce5ff434.tar.gz
ppe42-gcc-23255a5b14416256c1b36986cdc40840ce5ff434.zip
2011-08-03 Eric Botcazou <ebotcazou@adacore.com>
* gnat_ugn.texi: Document -Wstack-usage. * gcc-interface/misc.c (enumerate_modes): Add guard for ghost FP modes. 2011-08-03 Thomas Quinot <quinot@adacore.com> * sem_prag.adb Issue an error (not a warning) when a C++ type does not have keyword LIMITED. 2011-08-03 Yannick Moy <moy@adacore.com> * alfa.adb, alfa.ads, alfa_test.adb: New files. * ali.adb (Known_ALI_Lines): add 'C' lines (SCO) and 'F' lines (ALFA) (Scan_ALI): do not issue a fatal error if parsing known lines after Xref section (does not happen in compiler, only if code directly calls Scan_ALI). * get_alfa.adb, get_alfa.ads: New files. * lib-writ.adb, lib-writ.ads (Write_ALI): output ALFA information if needed. * lib-xref-alfa.adb: New file. * lib-xref.adb, lib-xref.ads (Xref_Entry): redefine information needed in cross-references for ALFA. Push ALFA treatments in separated local package. (Enclosing_Subpragram_Or_Package): treat specially subprogram identifiers. Return entity of package body instead of spec. Return Empty for a scope with no location. (Generate_Reference): adapt to new components for ALFA information. Remove the need for D references on definitions. (Is_Local_Reference): moved to ALFA local package (Output_References): extract subfunction as Extract_Source_Name (Output_Local_References): remove procedure, replaced by filtering of cross-references in package ALFA and printing in Put_ALFA. (Write_Entity_Name): remove procedure * lib.adb, lib.ads (Extract_Source_Name): extract here function to print exact name of entity as it appears in source file (Unit_Ref_Table): make type public for use in Lib.Xref.ALFA * put_alfa.adb, put_alfa.ads: New files. * xref_lib.adb (Search_Xref): protect read of cross-references against reading other sections of the ALI file, in gnatxref (Search): protect read of cross-references against reading other sections of the ALI file, in gnatfind. * gcc-interface/Make-lang.in: Update dependencies. 2011-08-03 Thomas Quinot <quinot@adacore.com> * sem_ch3.adb: Minor reformatting. 2011-08-03 Jose Ruiz <ruiz@adacore.com> * s-inmaop-vxworks.adb (Setup_Interrupt_Mask): Do nothing instead of raising an exception. 2011-08-03 Ed Schonberg <schonberg@adacore.com> * sem_res.adb (Set_String_Literal_Subtype): if index type is an integer type, always use 1 as the lower bound or string, even if lower bound of context is not static, to handle properly null strings in a non-static context. 2011-08-03 Bob Duff <duff@adacore.com> * sem_prag.adb (Resolve_Aggregate): An array aggregate with 'others' is always legal on the right-hand side of an assignment statement; there is always an applicable index constraint in this case. Therefore, the check for Pkind = N_Assignment_Statement is now unconditional -- it doesn't depend on whether Is_Constrained (Typ). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177239 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/lib.adb')
-rw-r--r--gcc/ada/lib.adb80
1 files changed, 69 insertions, 11 deletions
diff --git a/gcc/ada/lib.adb b/gcc/ada/lib.adb
index 42d922fcc95..c5149bee3b0 100644
--- a/gcc/ada/lib.adb
+++ b/gcc/ada/lib.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2010, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -33,16 +33,18 @@ pragma Style_Checks (All_Checks);
-- Subprogram ordering not enforced in this unit
-- (because of some logical groupings).
-with Atree; use Atree;
-with Einfo; use Einfo;
-with Fname; use Fname;
-with Output; use Output;
-with Sinfo; use Sinfo;
-with Sinput; use Sinput;
-with Stand; use Stand;
-with Stringt; use Stringt;
-with Tree_IO; use Tree_IO;
-with Uname; use Uname;
+with Atree; use Atree;
+with Csets; use Csets;
+with Einfo; use Einfo;
+with Fname; use Fname;
+with Output; use Output;
+with Sinfo; use Sinfo;
+with Sinput; use Sinput;
+with Stand; use Stand;
+with Stringt; use Stringt;
+with Tree_IO; use Tree_IO;
+with Uname; use Uname;
+with Widechar; use Widechar;
package body Lib is
@@ -478,6 +480,62 @@ package body Lib is
return Check_Same_Extended_Unit (S1, S2) = Yes_Before;
end Earlier_In_Extended_Unit;
+ -----------------------
+ -- Exact_Source_Name --
+ -----------------------
+
+ function Exact_Source_Name (Loc : Source_Ptr) return String is
+ U : constant Unit_Number_Type := Get_Source_Unit (Loc);
+ Buf : constant Source_Buffer_Ptr := Source_Text (Source_Index (U));
+ Orig : constant Source_Ptr := Original_Location (Loc);
+ P : Source_Ptr;
+
+ WC : Char_Code;
+ Err : Boolean;
+ pragma Warnings (Off, WC);
+ pragma Warnings (Off, Err);
+
+ begin
+ -- Entity is character literal
+
+ if Buf (Orig) = ''' then
+ return String (Buf (Orig .. Orig + 2));
+
+ -- Entity is operator symbol
+
+ elsif Buf (Orig) = '"' or else Buf (Orig) = '%' then
+ P := Orig;
+
+ loop
+ P := P + 1;
+ exit when Buf (P) = Buf (Orig);
+ end loop;
+
+ return String (Buf (Orig .. P));
+
+ -- Entity is identifier
+
+ else
+ P := Orig;
+
+ loop
+ if Is_Start_Of_Wide_Char (Buf, P) then
+ Scan_Wide (Buf, P, WC, Err);
+ elsif not Identifier_Char (Buf (P)) then
+ exit;
+ else
+ P := P + 1;
+ end if;
+ end loop;
+
+ -- Write out the identifier by copying the exact source characters
+ -- used in its declaration. Note that this means wide characters will
+ -- be in their original encoded form.
+
+ return String (Buf (Orig .. P - 1));
+ end if;
+ end Exact_Source_Name;
+
----------------------------
-- Entity_Is_In_Main_Unit --
----------------------------
OpenPOWER on IntegriCloud