https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88967
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- It indeed changed, already in OpenMP 4.0 actually, but I've been long hoping that the change will be reverted in later OpenMP standards, in the end that is not what is going to happen. OpenMP 3.1 and earlier had: "Variables with const-qualified type having no mutable member are shared." among the predetermined data sharing of variables for C/C++, and "Variables with const-qualified type having no mutable member may be listed in a C/C++ firstprivate clause." as an exception to the rule that variables with predetermined data sharing may not be specified in OpenMP data sharing clauses. That is gone in OpenMP 4.0, these variables are not predetermined anymore, so with default(none) they must be specified in data sharing clauses if they are referenced in the region. They can be specified in both shared and firstprivate clauses now, e.g. lastprivate/reduction/linear aren't suitable because they all need to write into the variable. If you want to write code that will work with both OpenMP 3.1 and OpenMP 4.0+ (including 5.0, which hasn't changed in this area), you need to use firstprivate(begin, len) in your example, that used to be valid in OpenMP 3.1 due to the above exception and keeps to be valid now. I've asked the ifort/clang maintainers about why they keep violating the standard, but haven't heard back from them. And I must say I was trying hard to readd the above rule + exception, but haven't succeeded. The exact wording why the above needs to be refused is: "The default(none) clause requires that each variable that is referenced in the construct, and that does not have a predetermined data-sharing attribute, must have its data-sharing attribute explicitly determined by being listed in a data-sharing attribute clause." As it is not predetermined (anymore) and is not explicitly determined either, it violates the requirement above.