diff options
author | Ed Schonberg <schonberg@adacore.com> | 2007-10-15 15:57:17 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2007-10-15 15:57:17 +0200 |
commit | ca14fd026e1d6cce51a7679fae85fdfb18e7aa16 (patch) | |
tree | 4f1dba856298f6524ce033b13b4fe152243e281e /gcc | |
parent | 81db9d770d61ae347a11c79a1f60c134fe729c85 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_disp.adb | 16 |
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 |