http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52227
Bug #: 52227 Summary: TARGET attribute mishandled in polymorphic types Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Keywords: missed-optimization, rejects-valid, wrong-code Severity: normal Priority: P3 Component: fortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: bur...@gcc.gnu.org CC: pa...@gcc.gnu.org Seemingly, the TARGET attribute is mishandled. The following program gives: target :: a,b 1 Error: Duplicate TARGET attribute specified at (1) Thus, there is a rejects valid issue. However, depending which variable is declared first, there is also a potential wrong-code issue as a TARGET variable might still get the "restrict" qualifier in the gimple representation. Or a nontarget might get no "restricted", which is a missed optimization. The other attributes have to be checked as well. That includes VOLATILE and ASYNCHRONOUS. It might be enough that the variable has the proper attribute and that such the attribute is properly propagated; at least volatile seems to be handled correctly, but it should be re-checked. (Asynchronous is currently not used on gimple level, cf. PR49733/PR25829; nevertheless, it should be propagated correctly.) I think the other attributes are either related to dimension/allocatable/pointer and already taken care of - or are dummy-related attributes such as optional, value (cf. PR51284), intent etc. type t end type t class(t), allocatable :: a(:), b(:) target :: a,b select type (a) type is (t) select type (b) type is (t) a(1) = b(1) end select end select end