http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52265
Bug #: 52265 Summary: [OOP] TREE dump confusing with nested SELECT TYPE Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: fortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: bur...@gcc.gnu.org CC: pa...@gcc.gnu.org The following program seems to work as expected, however, the dump is very irritating: switch (a._vptr->_hash) { case 6231989:; __tmp_type_t = a._data; { struct t * __tmp_type_t; switch (b._vptr->_hash) { case 6231989:; __tmp_type_t = b._data; *__tmp_type_t = *__tmp_type_t; There are two variables called "__tmp_type_t", one pointing to a._data and the other to b._data. Most striking is the last line where both variables occur. That's very confusing and would be impossible to do in C, C++, or Fortran. Expected: Use different variable names, e.g. via gfc_create_var (type, "__tmp_type_t") type t integer :: i = 5 end type t class(t), allocatable :: a, b allocate(a,b) b%i = 77 select type (a) type is (t) select type (b) type is (t) a = b b%i = 88 end select end select if (a%i /= 77) call abort () if (a%i /= 88) call abort () end