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