SELECT TYPE, SELECT RANK and ASSOCIATE have associate-name => selector and create a pointer to the selector. GCC was fixed to handle CLASS properly in class(t) :: var !$omp ... firstprivate(var) As a side effect, firstprivate(assoc_name) now also gets handled that way, effectively trying to firstprivate(selector) which should be shared... While firstprivate(var) does not appear explicitly, it gets added via gfc_omp_predetermined_sharing. I went for the simple solution and handle it only in gfortran's ctor/dtor. An alternative would be to set OMP_CLAUSE_FIRSTPRIVATE_NO_REFERENCE, which is currently only set for C++'s __for_end / __for_range and then later process it in ctor/dtor. I am not sure whether that's really best and what's the best way to propagate it. One way would be to create and use OMP_CLAUSE_DEFAULT_FIRSTPRIVATE_NO_REFERENCE. OK as is (simple version) – or is a fuller version better. If so, suggestion how to do this best? Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955