Hi! It seems that there is a bug some here:
On Wed, Jul 29, 2015 at 19:19:07 +0200, Jakub Jelinek wrote: > @@ -12918,6 +12989,28 @@ lower_omp_target (gimple_stmt_iterator * > var = var2; > } > > + if (offloaded > + && OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_FIRSTPRIVATE_POINTER) > + { > + if (TREE_CODE (TREE_TYPE (var)) == ARRAY_TYPE) > + { > + tree type = build_pointer_type (TREE_TYPE (var)); > + tree new_var = lookup_decl (var, ctx); > + x = create_tmp_var_raw (type, get_name (new_var)); > + gimple_add_tmp_var (x); > + x = build_simple_mem_ref (x); > + SET_DECL_VALUE_EXPR (new_var, x); > + DECL_HAS_VALUE_EXPR_P (new_var) = 1; > + } > + continue; > + } > + > + if (offloaded && OMP_CLAUSE_MAP_PRIVATE (c)) > + { > + map_cnt++; > + continue; > + } > + > if (!maybe_lookup_field (var, ctx)) > continue; > Here is the reproducer: #pragma omp declare target int a[1]; #pragma omp end declare target void foo () { #pragma omp target map(to: a[0:1]) a; } lookup_decl (var, ctx) tries to lookup for 'a', but ctx->cb.decl_map->get () returns null-pointer. $ gcc -fopenmp -c test.c test.c: In function ‘foo’: test.c:7:11: internal compiler error: Segmentation fault #pragma omp target map(to: a[0:1]) ^ 0xd27276 crash_signal gcc/toplev.c:352 0xbae3fa lookup_decl gcc/omp-low.c:1056 0xbe208c lower_omp_target gcc/omp-low.c:13362 0xbe8464 lower_omp_1 gcc/omp-low.c:14504 0xbe8911 lower_omp gcc/omp-low.c:14592 0xbe8017 lower_omp_1 gcc/omp-low.c:14436 0xbe8911 lower_omp gcc/omp-low.c:14592 0xbe808b lower_omp_1 gcc/omp-low.c:14445 0xbe8911 lower_omp gcc/omp-low.c:14592 0xbe8ad9 execute_lower_omp gcc/omp-low.c:14630 0xbe8b7e execute gcc/omp-low.c:14667 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. -- Ilya