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
This commit is contained in:
parent
87c66338d7
commit
073afca688
|
@ -1,3 +1,8 @@
|
||||||
|
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,
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
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
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
! { 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
|
Loading…
Reference in New Issue