re PR c++/67522 (OpenMP ICE in type_dependent_expression_p)
PR c++/67522 * semantics.c (handle_omp_array_sections_1): Only run type_dependent_expression_p on VAR_DECL/PARM_DECLs. (finish_omp_clauses) <case OMP_CLAUSE_LINEAR>: Likewise. Don't adjust OMP_CLAUSE_LINEAR_STEP if OMP_CLAUSE_DECL is not a VAR_DECL/PARM_DECL. * g++.dg/gomp/pr67522.C: New test. From-SVN: r227610
This commit is contained in:
parent
cbdfbde871
commit
7da8534d1e
@ -1,5 +1,12 @@
|
|||||||
2015-09-10 Jakub Jelinek <jakub@redhat.com>
|
2015-09-10 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR c++/67522
|
||||||
|
* semantics.c (handle_omp_array_sections_1): Only run
|
||||||
|
type_dependent_expression_p on VAR_DECL/PARM_DECLs.
|
||||||
|
(finish_omp_clauses) <case OMP_CLAUSE_LINEAR>: Likewise.
|
||||||
|
Don't adjust OMP_CLAUSE_LINEAR_STEP if OMP_CLAUSE_DECL
|
||||||
|
is not a VAR_DECL/PARM_DECL.
|
||||||
|
|
||||||
PR c++/67511
|
PR c++/67511
|
||||||
* semantics.c (handle_omp_for_class_iterator): Don't wrap
|
* semantics.c (handle_omp_for_class_iterator): Don't wrap
|
||||||
error_mark_node into a NOP_EXPR to void_type_node.
|
error_mark_node into a NOP_EXPR to void_type_node.
|
||||||
|
@ -4294,8 +4294,6 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
|
|||||||
{
|
{
|
||||||
if (error_operand_p (t))
|
if (error_operand_p (t))
|
||||||
return error_mark_node;
|
return error_mark_node;
|
||||||
if (type_dependent_expression_p (t))
|
|
||||||
return NULL_TREE;
|
|
||||||
if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
|
if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
|
||||||
{
|
{
|
||||||
if (processing_template_decl)
|
if (processing_template_decl)
|
||||||
@ -4318,6 +4316,8 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
|
|||||||
omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
|
omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
|
||||||
return error_mark_node;
|
return error_mark_node;
|
||||||
}
|
}
|
||||||
|
if (type_dependent_expression_p (t))
|
||||||
|
return NULL_TREE;
|
||||||
t = convert_from_reference (t);
|
t = convert_from_reference (t);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@ -5332,7 +5332,8 @@ finish_omp_clauses (tree clauses)
|
|||||||
goto check_dup_generic;
|
goto check_dup_generic;
|
||||||
case OMP_CLAUSE_LINEAR:
|
case OMP_CLAUSE_LINEAR:
|
||||||
t = OMP_CLAUSE_DECL (c);
|
t = OMP_CLAUSE_DECL (c);
|
||||||
if (!type_dependent_expression_p (t)
|
if ((VAR_P (t) || TREE_CODE (t) == PARM_DECL)
|
||||||
|
&& !type_dependent_expression_p (t)
|
||||||
&& !INTEGRAL_TYPE_P (TREE_TYPE (t))
|
&& !INTEGRAL_TYPE_P (TREE_TYPE (t))
|
||||||
&& TREE_CODE (TREE_TYPE (t)) != POINTER_TYPE)
|
&& TREE_CODE (TREE_TYPE (t)) != POINTER_TYPE)
|
||||||
{
|
{
|
||||||
@ -5359,7 +5360,9 @@ finish_omp_clauses (tree clauses)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
t = mark_rvalue_use (t);
|
t = mark_rvalue_use (t);
|
||||||
if (!processing_template_decl)
|
if (!processing_template_decl
|
||||||
|
&& (VAR_P (OMP_CLAUSE_DECL (c))
|
||||||
|
|| TREE_CODE (OMP_CLAUSE_DECL (c)) == PARM_DECL))
|
||||||
{
|
{
|
||||||
if (TREE_CODE (OMP_CLAUSE_DECL (c)) == PARM_DECL)
|
if (TREE_CODE (OMP_CLAUSE_DECL (c)) == PARM_DECL)
|
||||||
t = maybe_constant_value (t);
|
t = maybe_constant_value (t);
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
2015-09-10 Jakub Jelinek <jakub@redhat.com>
|
2015-09-10 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR c++/67522
|
||||||
|
* g++.dg/gomp/pr67522.C: New test.
|
||||||
|
|
||||||
PR middle-end/67521
|
PR middle-end/67521
|
||||||
* c-c++-common/gomp/pr67521.c: New test.
|
* c-c++-common/gomp/pr67521.c: New test.
|
||||||
|
|
||||||
|
26
gcc/testsuite/g++.dg/gomp/pr67522.C
Normal file
26
gcc/testsuite/g++.dg/gomp/pr67522.C
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// PR c++/67522
|
||||||
|
// { dg-do compile }
|
||||||
|
// { dg-options "-fopenmp" }
|
||||||
|
|
||||||
|
struct S;
|
||||||
|
|
||||||
|
template <int N>
|
||||||
|
void
|
||||||
|
foo (void)
|
||||||
|
{
|
||||||
|
#pragma omp simd linear (S) // { dg-error "is not a variable in clause" }
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
;
|
||||||
|
|
||||||
|
#pragma omp target map (S[0:10]) // { dg-error "is not a variable in" }
|
||||||
|
;
|
||||||
|
|
||||||
|
#pragma omp task depend (inout: S[0:10]) // { dg-error "is not a variable in" }
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bar ()
|
||||||
|
{
|
||||||
|
foo <0> ();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user