diff mbox

[fortran] PR66929 fix iso_varying_string ICE

Message ID 55B3D68D.5030203@sfr.fr
State New
Headers show

Commit Message

Mikael Morin July 25, 2015, 6:33 p.m. UTC
Le 21/07/2015 23:10, Paul Richard Thomas a écrit :
> Hi Mikael,
>
> This looks fine to me - OK for trunk.
>
> Thanks for the patch
>
> Paul
>
> On 21 July 2015 at 14:53, Mikael Morin <mikael.morin@sfr.fr> wrote:
>> Hello,
>>
>> The fix for PR61831 committed recently [1] introduced/uncovered a NULLL
>> pointer dereference with iso_varying_string, because a generic symbol (which
>> has a NULL result) is used as procedure symbol, instead of the specific one.
>> Fixed by using esym if it's available.
>>
>> Regression-tested on x86_64-linux. OK for trunk?
>>
>> Mikael
>>
>> [1]: https://gcc.gnu.org/ml/gcc-patches/2015-06/msg01389.html
>>
>
Hello,

I would like to backport the patch.
As the bug was discovered with the patch [1] above, the test 
generic_30.f90 works on the branches, which don't have that patch.
Meanwhile, I have managed to find a test generic_31.f90 that exhibits a 
wrong code already on the branch, which justifies the backport.

Regression tested on the 5 branch, OK for 5 and 4.9?

Mikael
2015-07-25  Mikael Morin  <mikael@gcc.gnu.org>

	PR fortran/66929
	* trans-array.c (gfc_get_proc_ifc_for_expr): Use esym as procedure
	symbol if available.

2015-07-25  Mikael Morin  <mikael@gcc.gnu.org>

	PR fortran/66929
	* gfortran.dg/generic_30.f90: New.
	* gfortran.dg/generic_31.f90: New.

Comments

Mikael Morin Aug. 6, 2015, 10:09 a.m. UTC | #1
Le 25/07/2015 20:33, Mikael Morin a écrit :
> Le 21/07/2015 23:10, Paul Richard Thomas a écrit :
>> On 21 July 2015 at 14:53, Mikael Morin <mikael.morin@sfr.fr> wrote:
>>> Hello,
>>>
>>> The fix for PR61831 committed recently [1] introduced/uncovered a NULLL
>>> pointer dereference with iso_varying_string, because a generic symbol
>>> (which
>>> has a NULL result) is used as procedure symbol, instead of the
>>> specific one.
>>> Fixed by using esym if it's available.
>>>
>>> Regression-tested on x86_64-linux. OK for trunk?
>>>
>>> Mikael
>>>
>>> [1]: https://gcc.gnu.org/ml/gcc-patches/2015-06/msg01389.html
>>>
>>
> Hello,
>
> I would like to backport the patch.
> As the bug was discovered with the patch [1] above, the test
> generic_30.f90 works on the branches, which don't have that patch.
> Meanwhile, I have managed to find a test generic_31.f90 that exhibits a
> wrong code already on the branch, which justifies the backport.
>
> Regression tested on the 5 branch, OK for 5 and 4.9?
>

Ping: https://gcc.gnu.org/ml/gcc-patches/2015-07/msg02160.html
Paul Richard Thomas Aug. 6, 2015, 10:21 a.m. UTC | #2
Hi Mikael,

This is fine for backporting.

Thanks for doing this.

Paul

On 6 August 2015 at 12:09, Mikael Morin <mikael.morin@sfr.fr> wrote:
> Le 25/07/2015 20:33, Mikael Morin a écrit :
>>
>> Le 21/07/2015 23:10, Paul Richard Thomas a écrit :
>>>
>>> On 21 July 2015 at 14:53, Mikael Morin <mikael.morin@sfr.fr> wrote:
>>>>
>>>> Hello,
>>>>
>>>> The fix for PR61831 committed recently [1] introduced/uncovered a NULLL
>>>> pointer dereference with iso_varying_string, because a generic symbol
>>>> (which
>>>> has a NULL result) is used as procedure symbol, instead of the
>>>> specific one.
>>>> Fixed by using esym if it's available.
>>>>
>>>> Regression-tested on x86_64-linux. OK for trunk?
>>>>
>>>> Mikael
>>>>
>>>> [1]: https://gcc.gnu.org/ml/gcc-patches/2015-06/msg01389.html
>>>>
>>>
>> Hello,
>>
>> I would like to backport the patch.
>> As the bug was discovered with the patch [1] above, the test
>> generic_30.f90 works on the branches, which don't have that patch.
>> Meanwhile, I have managed to find a test generic_31.f90 that exhibits a
>> wrong code already on the branch, which justifies the backport.
>>
>> Regression tested on the 5 branch, OK for 5 and 4.9?
>>
>
> Ping: https://gcc.gnu.org/ml/gcc-patches/2015-07/msg02160.html
diff mbox

Patch

Index: trans-array.c
===================================================================
--- trans-array.c	(révision 225979)
+++ trans-array.c	(copie de travail)
@@ -9166,7 +9166,11 @@  gfc_get_proc_ifc_for_expr (gfc_expr *procedure_ref
     return NULL;
 
   /* Normal procedure case.  */
-  sym = procedure_ref->symtree->n.sym;
+  if (procedure_ref->expr_type == EXPR_FUNCTION
+      && procedure_ref->value.function.esym)
+    sym = procedure_ref->value.function.esym;
+  else
+    sym = procedure_ref->symtree->n.sym;
 
   /* Typebound procedure case.  */
   for (ref = procedure_ref->ref; ref; ref = ref->next)