summaryrefslogtreecommitdiff
path: root/gcc/ada/bcheck.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-01-03 15:32:19 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-01-03 15:32:19 +0000
commite0521a36726eeeabf7bf46626f1b9a27a27fe373 (patch)
treeb913840c88dfad71cc2715a06794206e2889a7a3 /gcc/ada/bcheck.adb
parent05c3e0e9708795d88a1f0b2f7e653f5bd16dc17c (diff)
downloadgcc-e0521a36726eeeabf7bf46626f1b9a27a27fe373.tar.gz
* s-atacco.ads, a-direio.adb: Protect use of 'Constrained by warnings
on/off, since this is an obsolescent feature, for which we now generate a warning. * sem_attr.adb (Analyze_Attribute, case Constrained): Issue warning if warning mode is set and obsolescent usage of this attribute occurs. (Resolve_Access, case 'Access): Note that GNAT uses the context type to disambiguate overloaded prefixes, in accordance with AI-235. GNAT code predates, and partly motivates, the adoption of the AI. Implement new Ada 2005 attribute Mod * exp_attr.adb (Expand_N_Attribute_Reference): Implement Ada 2005 attribute Mod. * par-ch4.adb (P_Name): In Ada 2005 mode, recognize new attribute Mod * snames.h, snames.ads, snames.adb: Add entry for No_Dependence for pragma restrictions. New entry for Ada 2005 attribute Mod. * par-prag.adb: Add recognition of new pragma Restrictions No_Dependence Recognize restriction No_Obsolescent_Features at parse time * bcheck.adb: Add circuitry for checking for consistency of No_Dependence restrictions. * lib-writ.ads, lib-writ.adb: Output new R lines for No_Dependence restrictions. * restrict.ads, restrict.adb: Add subprograms to deal with No_Dependence restrictions. * rtsfind.adb: Check that implicit with's do not violate No_Dependence restrictions. * sem_ch3.adb, sem_ch11.adb, sem_ch13.adb, lib-xref.adb, sem_attr.adb: Add check for new restriction No_Obsolescent_Features * scn.ads, prj-err.ads, prj-err.adb, ali-util.adb, gprep.adb: Add new dummy parameter to scng instantiation. Needed for new restriction No_Obsolescent_Features * scn.adb: (Obsolescent_Check): New procedure Needed for new restriction No_Obsolescent_Features * scng.ads, scng.adb: Always allow wide characters in Ada 2005 mode, as specified by AI-285, needed for implementation of AI-388 (adding greek pi to Ada.Numerics). Add new generic formal to scng, needed for new restriction No_Obsolescent_Features. * s-rident.ads: Add new restriction No_Obsolescent_Features. * ali.ads, ali.adb: Adjustments for reading new No_Dependence restrictions lines. (Scan_ALI): When finding an unexpected character on an R line, raise exception Bad_R_Line, instead of calling Fatal_Error, so that, when Ignore_Errors is True, default restrictions are set and scanning of the ALI file continues with the next line. Also, when Bad_R_Line is raised and Ignore_Errors is True, skip to the end of le line. * sem_ch10.adb: Check that explicit with's do not violate No_Dependence restrictions. (Install_Withed_Unit): Add code to implement AI-377 and diagnose illegal context clauses containing child units of instance. * sem_prag.adb: Processing and checking for new No_Dependence restrictions. (Analyze_Pragma, case Psect_Object): Call Check_Arg_Is_External_Name to analyze and check the External argument. * a-numeri.ads: Add greek letter pi as alternative spelling of Pi git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@92829 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/bcheck.adb')
-rw-r--r--gcc/ada/bcheck.adb65
1 files changed, 63 insertions, 2 deletions
diff --git a/gcc/ada/bcheck.adb b/gcc/ada/bcheck.adb
index 16aeb8589ea..2ada0cf1353 100644
--- a/gcc/ada/bcheck.adb
+++ b/gcc/ada/bcheck.adb
@@ -56,8 +56,12 @@ package body Bcheck is
procedure Check_Consistent_Zero_Cost_Exception_Handling;
procedure Consistency_Error_Msg (Msg : String);
- -- Produce an error or a warning message, depending on whether
- -- an inconsistent configuration is permitted or not.
+ -- Produce an error or a warning message, depending on whether an
+ -- inconsistent configuration is permitted or not.
+
+ function Same_Unit (U1 : Name_Id; U2 : Name_Id) return Boolean;
+ -- Used to compare two unit names for No_Dependence checks. U1 is in
+ -- standard unit name format, and U2 is in literal form with periods.
------------------------------------
-- Check_Consistent_Configuration --
@@ -539,8 +543,65 @@ package body Bcheck is
end loop;
end if;
end loop;
+
+ -- Now deal with No_Dependence indications. Note that we put the loop
+ -- through entries in the no dependency table first, since this loop
+ -- is most often empty (no such pragma Restrictions in use).
+
+ for ND in No_Deps.First .. No_Deps.Last loop
+ declare
+ ND_Unit : constant Name_Id := No_Deps.Table (ND).No_Dep_Unit;
+
+ begin
+ for J in ALIs.First .. ALIs.Last loop
+ declare
+ A : ALIs_Record renames ALIs.Table (J);
+
+ begin
+ for K in A.First_Unit .. A.Last_Unit loop
+ declare
+ U : Unit_Record renames Units.Table (K);
+ begin
+ for L in U.First_With .. U.Last_With loop
+ if Same_Unit (Withs.Table (L).Uname, ND_Unit) then
+ Error_Msg_Name_1 := U.Uname;
+ Error_Msg_Name_2 := ND_Unit;
+ Consistency_Error_Msg
+ ("unit & violates restriction " &
+ "No_Dependence => %");
+ end if;
+ end loop;
+ end;
+ end loop;
+ end;
+ end loop;
+ end;
+ end loop;
end Check_Consistent_Restrictions;
+ ---------------
+ -- Same_Unit --
+ ---------------
+
+ function Same_Unit (U1 : Name_Id; U2 : Name_Id) return Boolean is
+ begin
+ -- Note, the string U1 has a terminating %s or %b, U2 does not
+
+ if Length_Of_Name (U1) - 2 = Length_Of_Name (U2) then
+ Get_Name_String (U1);
+
+ declare
+ U1_Str : constant String := Name_Buffer (1 .. Name_Len - 2);
+ begin
+ Get_Name_String (U2);
+ return U1_Str = Name_Buffer (1 .. Name_Len);
+ end;
+
+ else
+ return False;
+ end if;
+ end Same_Unit;
+
---------------------------------------------------
-- Check_Consistent_Zero_Cost_Exception_Handling --
---------------------------------------------------