aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2007-10-15 15:57:17 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2007-10-15 15:57:17 +0200
commitca14fd026e1d6cce51a7679fae85fdfb18e7aa16 (patch)
tree4f1dba856298f6524ce033b13b4fe152243e281e
parent81db9d770d61ae347a11c79a1f60c134fe729c85 (diff)
downloadgcc-ca14fd026e1d6cce51a7679fae85fdfb18e7aa16.zip
gcc-ca14fd026e1d6cce51a7679fae85fdfb18e7aa16.tar.gz
gcc-ca14fd026e1d6cce51a7679fae85fdfb18e7aa16.tar.bz2
sem_disp.adb (Find_Controlling_Arg): Examine the call node before examining its original form...
2007-10-15 Ed Schonberg <schonberg@adacore.com> * sem_disp.adb (Find_Controlling_Arg): Examine the call node before examining its original form, to handle properly operator calls that have been rewritten. From-SVN: r129337
-rw-r--r--gcc/ada/sem_disp.adb16
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb
index 5924039..37eb9ed 100644
--- a/gcc/ada/sem_disp.adb
+++ b/gcc/ada/sem_disp.adb
@@ -1132,9 +1132,21 @@ package body Sem_Disp is
return Find_Controlling_Arg (Expression (Orig_Node));
end if;
- -- Dispatching on result case
+ -- Dispatching on result case. If expansion is disabled, the node still
+ -- has the structure of a function call. However, if the function name
+ -- is an operator and the call was given in infix form, the original
+ -- node has no controlling result and we must examine the current node.
+
+ if Nkind (N) = N_Function_Call
+ and then Present (Controlling_Argument (N))
+ and then Has_Controlling_Result (Entity (Name (N)))
+ then
+ return Controlling_Argument (N);
- if Nkind (Orig_Node) = N_Function_Call
+ -- If expansion is enabled, the call may have been transformed into
+ -- an indirect call, and we need to recover the original node.
+
+ elsif Nkind (Orig_Node) = N_Function_Call
and then Present (Controlling_Argument (Orig_Node))
and then Has_Controlling_Result (Entity (Name (Orig_Node)))
then