Commit 073afca6 by Bernd Edlinger Committed by Bernd Edlinger

class.c (gfc_build_class_symbol): Append "_t" to target class names to make the…

class.c (gfc_build_class_symbol): Append "_t" to target class names to make the generated type names unique.

gcc:
2014-04-10  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * fortran/class.c (gfc_build_class_symbol): Append "_t" to target class
        names to make the generated type names unique.

testsuite:
2014-04-10  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * gfortran.dg/class_nameclash.f90: New test.

From-SVN: r209277
parent 87c66338
2014-04-10 Bernd Edlinger <bernd.edlinger@hotmail.de>
* fortran/class.c (gfc_build_class_symbol): Append "_t" to target class
names to make the generated type names unique.
2014-04-10 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> 2014-04-10 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR debug/60655 PR debug/60655
......
...@@ -588,13 +588,13 @@ gfc_build_class_symbol (gfc_typespec *ts, symbol_attribute *attr, ...@@ -588,13 +588,13 @@ gfc_build_class_symbol (gfc_typespec *ts, symbol_attribute *attr,
else if ((*as) && attr->pointer) else if ((*as) && attr->pointer)
sprintf (name, "__class_%s_%d_%dp", tname, rank, (*as)->corank); sprintf (name, "__class_%s_%d_%dp", tname, rank, (*as)->corank);
else if ((*as)) else if ((*as))
sprintf (name, "__class_%s_%d_%d", tname, rank, (*as)->corank); sprintf (name, "__class_%s_%d_%dt", tname, rank, (*as)->corank);
else if (attr->pointer) else if (attr->pointer)
sprintf (name, "__class_%s_p", tname); sprintf (name, "__class_%s_p", tname);
else if (attr->allocatable) else if (attr->allocatable)
sprintf (name, "__class_%s_a", tname); sprintf (name, "__class_%s_a", tname);
else else
sprintf (name, "__class_%s", tname); sprintf (name, "__class_%s_t", tname);
if (ts->u.derived->attr.unlimited_polymorphic) if (ts->u.derived->attr.unlimited_polymorphic)
{ {
......
2014-04-10 Bernd Edlinger <bernd.edlinger@hotmail.de>
* gfortran.dg/class_nameclash.f90: New test.
2014-04-10 Paolo Carlini <paolo.carlini@oracle.com> 2014-04-10 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/52844 PR c++/52844
......
! { dg-do run }
!
! try to provoke class name clashes in gfc_build_class_symbol
!
module test_module
implicit none
type, public :: test_p
private
class (test_p), pointer :: next => null()
end type test_p
type, public :: test
! Error in "call do_it (x)" below:
! Type mismatch in argument 'x' at (1); passed CLASS(test_p) to CLASS(test)
class (test), pointer :: next => null()
end type test
contains
subroutine do_it (x)
class (test_p), target :: x
x%next => x
return
end subroutine do_it
end module test_module
use test_module
implicit none
class (test_p), pointer :: x
allocate (x)
call do_it (x)
deallocate (x)
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment