7d9c212ec4
This fixes gcc not marking constants emitted into assembly as shared which would result in strange build errors such as: ``` $ gcc -fopenmp test-openmp.c test-openmp.c: In function ‘testfunc’: test-openmp.c:10:15: error: ‘*.LC0’ not specified in enclosing ‘parallel’ 10 | float k[3] = { 0.1f, 0.1f, 0.1f } ; | ^ test-openmp.c:7:9: error: enclosing ‘parallel’ 7 | #pragma omp parallel for default(none) shared(f) | ^~~ ``` This happens only sometimes and not on all platforms and seems to mostly come down to luck. Not bumping crosstoolchains for now, as that would be too intensive on the builders right now. If we encounter this somewhere we should bump cross as well. [ci skip]
17 lines
556 B
Diff
17 lines
556 B
Diff
Backport: https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=276211
|
||
|
||
This fixes potential failures with openmp and constants, such as
|
||
|
||
error: ‘*.LC0’ not specified in enclosing ‘parallel’
|
||
|
||
--- gcc/gimplify.c
|
||
+++ gcc/gimplify.c
|
||
@@ -7132,6 +7132,8 @@
|
||
kind = lang_hooks.decls.omp_predetermined_sharing (decl);
|
||
if (kind != OMP_CLAUSE_DEFAULT_UNSPECIFIED)
|
||
default_kind = kind;
|
||
+ else if (VAR_P (decl) && TREE_STATIC (decl) && DECL_IN_CONSTANT_POOL (decl))
|
||
+ default_kind = OMP_CLAUSE_DEFAULT_SHARED;
|
||
|
||
switch (default_kind)
|
||
{
|