aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2009-04-10 16:43:28 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2009-04-10 16:43:28 +0200
commit8a78c50d6e09186aa53a95310db705d118ec4bb1 (patch)
tree91d1547a1ae1bad765c6ee2a23ba711b2c423ae1 /gcc
parentb66c3ff49ece1cb52dc330fd9c3eed7110457362 (diff)
downloadgcc-8a78c50d6e09186aa53a95310db705d118ec4bb1.zip
gcc-8a78c50d6e09186aa53a95310db705d118ec4bb1.tar.gz
gcc-8a78c50d6e09186aa53a95310db705d118ec4bb1.tar.bz2
[multiple changes]
2009-04-10 Ed Schonberg <schonberg@adacore.com> * exp_attr.adb (Expand_N_Attribute_Reference, case 'Tag): If the tagged type is a synchronized type, retrieve tag information from the corresponding record, which has the dispatch table link. 2009-04-10 Jerome Lambourg <lambourg@adacore.com> * g-comlin.adb (Group_Analysis): Take care of switches that might be decomposed afterwards, but are present as-is in the command line configuration, and thus should be kept as-is. From-SVN: r145913
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog12
-rw-r--r--gcc/ada/exp_attr.adb7
-rw-r--r--gcc/ada/g-comlin.adb47
3 files changed, 53 insertions, 13 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 0849bda..a0c2729 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,15 @@
+2009-04-10 Ed Schonberg <schonberg@adacore.com>
+
+ * exp_attr.adb (Expand_N_Attribute_Reference, case 'Tag): If the tagged
+ type is a synchronized type, retrieve tag information from the
+ corresponding record, which has the dispatch table link.
+
+2009-04-10 Jerome Lambourg <lambourg@adacore.com>
+
+ * g-comlin.adb (Group_Analysis): Take care of switches that might be
+ decomposed afterwards, but are present as-is in the command line
+ configuration, and thus should be kept as-is.
+
2009-04-10 Robert Dewar <dewar@adacore.com>
* gnat_rm.texi: Document that postconditions are tested on implicit
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb
index 532fd76..6c3d1d4 100644
--- a/gcc/ada/exp_attr.adb
+++ b/gcc/ada/exp_attr.adb
@@ -4341,6 +4341,13 @@ package body Exp_Attr is
Ttyp := Underlying_Type (Ttyp);
+ -- Ada 2005: The type may be a synchronized tagged type, in which
+ -- case the tag information is stored in the corresponding record.
+
+ if Is_Concurrent_Type (Ttyp) then
+ Ttyp := Corresponding_Record_Type (Ttyp);
+ end if;
+
if Prefix_Is_Type then
-- For VMs we leave the type attribute unexpanded because
diff --git a/gcc/ada/g-comlin.adb b/gcc/ada/g-comlin.adb
index adb1553..307f890 100644
--- a/gcc/ada/g-comlin.adb
+++ b/gcc/ada/g-comlin.adb
@@ -1509,22 +1509,43 @@ package body GNAT.Command_Line is
end Group_Analysis;
begin
- -- Are we adding a switch that can in fact be expanded through aliases ?
- -- If yes, we add separately each of its expansion.
+ -- First determine if the switch corresponds to one belonging to the
+ -- configuration. If so, run callback and exit.
+
+ if Cmd.Config /= null and then Cmd.Config.Switches /= null then
+ for S in Cmd.Config.Switches'Range loop
+ declare
+ Config_Switch : String renames Cmd.Config.Switches (S).all;
+ begin
+ if Actual_Switch (Config_Switch) = Switch
+ and then
+ ((Can_Have_Parameter (Config_Switch)
+ and then Parameter /= "")
+ or else
+ (not Require_Parameter (Config_Switch)
+ and then Parameter = ""))
+ then
+ Callback (Switch, Parameter);
+ return;
+ end if;
+ end;
+ end loop;
+ end if;
+
+ -- If adding a switch that can in fact be expanded through aliases,
+ -- add separately each of its expansions.
-- This takes care of expansions like "-T" -> "-gnatwrs", where the
-- alias and its expansion do not have the same prefix. Given the order
-- in which we do things here, the expansion of the alias will itself
- -- be checked for a common prefix and further split into simple switches
+ -- be checked for a common prefix and split into simple switches.
if Unalias
and then Cmd.Config /= null
and then Cmd.Config.Aliases /= null
then
for A in Cmd.Config.Aliases'Range loop
- if Cmd.Config.Aliases (A).all = Switch
- and then Parameter = ""
- then
+ if Cmd.Config.Aliases (A).all = Switch and then Parameter = "" then
For_Each_Simple_Switch
(Cmd, Cmd.Config.Expansions (A).all, "");
return;
@@ -1532,18 +1553,17 @@ package body GNAT.Command_Line is
end loop;
end if;
- -- Are we adding a switch grouping several switches ? If yes, add each
- -- of the simple switches instead.
+ -- If adding a switch grouping several switches, add each of the simple
+ -- switches instead.
- if Cmd.Config /= null
- and then Cmd.Config.Prefixes /= null
- then
+ if Cmd.Config /= null and then Cmd.Config.Prefixes /= null then
for P in Cmd.Config.Prefixes'Range loop
if Switch'Length > Cmd.Config.Prefixes (P)'Length + 1
and then Looking_At
(Switch, Switch'First, Cmd.Config.Prefixes (P).all)
then
-- Alias expansion will be done recursively
+
if Cmd.Config.Switches = null then
for S in Switch'First + Cmd.Config.Prefixes (P)'Length
.. Switch'Last
@@ -1560,8 +1580,9 @@ package body GNAT.Command_Line is
(Switch'First + Cmd.Config.Prefixes (P)'Length
.. Switch'Last))
then
- -- Recursive calls already done on each switch of the
- -- group. Let's return to not call Callback.
+ -- Recursive calls already done on each switch of the group:
+ -- Return without executing Callback.
+
return;
end if;
end if;