This patch adds documentation for obsolete pragma Propagate_Exceptions,
and also removes the flag and residual junk code in the compiler that
did nothing. No test, since no functional effect (just a cleanup!)
Tested on x86_64-pc-linux-gnu, committed on trunk
2013-07-05 Robert Dewar <[email protected]>
* freeze.adb (Freeze_Entity): Remove test of obsolete flag
Propagate_Exceptions, and associated useless code that did
nothing.
* gnat_rm.texi: Add documentation for obsolete pragma
Propagate_Exceptions.
* opt.ads (Propagate_Exceptions): Obsolete flag removed.
* sem_prag.adb (Analyze_Pragma, case Propagate_Exceptions):
Remove useless and obsolete setting of Propagate_Exceptions flag.
Index: gnat_rm.texi
===================================================================
--- gnat_rm.texi (revision 200697)
+++ gnat_rm.texi (working copy)
@@ -206,6 +206,7 @@
* Pragma Priority_Specific_Dispatching::
* Pragma Profile::
* Pragma Profile_Warnings::
+* Pragma Propagate_Exceptions::
* Pragma Psect_Object::
* Pragma Pure_05::
* Pragma Pure_12::
@@ -1010,6 +1011,7 @@
* Pragma Priority_Specific_Dispatching::
* Pragma Profile::
* Pragma Profile_Warnings::
+* Pragma Propagate_Exceptions::
* Pragma Psect_Object::
* Pragma Pure_05::
* Pragma Pure_12::
@@ -5288,7 +5290,24 @@
violations of the profile generate warning messages instead
of error messages.
+@node Pragma Propagate_Exceptions
+@unnumberedsec Pragma Propagate_Exceptions
+@cindex Interfacing to C++
+@findex Propagate_Exceptions
@noindent
+Syntax:
+
+@smallexample @c ada
+pragma Propagate_Exceptions;
+@end smallexample
+
+@noindent
+This pragma is now obsolete and, other than generating a warning if warnings
+on obsolescent features are enabled, is ignored.
+It is retained for compatibility
+purposes. It used to be used in connection with optimization of
+a now-obsolete mechanism for implementation of exceptions.
+
@node Pragma Psect_Object
@unnumberedsec Pragma Psect_Object
@findex Psect_Object
Index: sem_prag.adb
===================================================================
--- sem_prag.adb (revision 200697)
+++ sem_prag.adb (working copy)
@@ -10300,7 +10300,7 @@
if Warn_On_Obsolescent_Feature then
Error_Msg_N
- ("'G'N'A'T pragma cpp'_virtual is now obsolete and has no "
+ ("'G'N'A'T pragma Cpp'_Virtual is now obsolete and has no "
& "effect?j?", N);
end if;
end CPP_Virtual;
@@ -10315,7 +10315,7 @@
if Warn_On_Obsolescent_Feature then
Error_Msg_N
- ("'G'N'A'T pragma cpp'_vtable is now obsolete and has no "
+ ("'G'N'A'T pragma Cpp'_Vtable is now obsolete and has no "
& "effect?j?", N);
end if;
end CPP_Vtable;
@@ -14604,6 +14604,7 @@
when Pragma_Overriding_Renamings =>
GNAT_Pragma;
Check_Arg_Count (0);
+ Check_Valid_Configuration_Pragma;
Overriding_Renamings := True;
----------
@@ -15039,7 +15040,7 @@
-- pragma Predicate
-- ([Entity =>] type_LOCAL_NAME,
- -- [Check =>] EXPRESSION);
+ -- [Check =>] boolean_EXPRESSION);
when Pragma_Predicate => Predicate : declare
Type_Id : Node_Id;
@@ -15469,10 +15470,10 @@
GNAT_Pragma;
Check_Arg_Count (0);
- -- This code does not agree with above (no effect) comment ???
-
- if In_Extended_Main_Source_Unit (N) then
- Propagate_Exceptions := True;
+ if Warn_On_Obsolescent_Feature then
+ Error_Msg_N
+ ("'G'N'A'T pragma Propagate'_Exceptions is now obsolete " &
+ "and has no effect?j?", N);
end if;
------------------
Index: freeze.adb
===================================================================
--- freeze.adb (revision 200688)
+++ freeze.adb (working copy)
@@ -4940,21 +4940,6 @@
and then not Is_Library_Level_Entity (E)
then
Set_Is_Public (E, False);
-
- -- If no address clause and not intrinsic, then for imported
- -- subprogram in main unit, generate descriptor if we are in
- -- Propagate_Exceptions mode.
-
- -- This is very odd code, it makes a null result, why ???
-
- elsif Propagate_Exceptions
- and then Is_Imported (E)
- and then not Is_Intrinsic_Subprogram (E)
- and then Convention (E) /= Convention_Stubbed
- then
- if Result = No_List then
- Result := Empty_List;
- end if;
end if;
end if;
Index: opt.ads
===================================================================
--- opt.ads (revision 200688)
+++ opt.ads (working copy)
@@ -1147,12 +1147,6 @@
-- Set to true to enable printing of package standard in source form.
-- This flag is set by the -gnatS switch
- Propagate_Exceptions : Boolean := False;
- -- GNAT
- -- Indicates if subprogram descriptor exception tables should be
- -- built for imported subprograms. Set True if a Propagate_Exceptions
- -- pragma applies to the extended main unit.
-
type Usage is (Unknown, Not_In_Use, In_Use);
Project_File_In_Use : Usage := Unknown;
-- GNAT