[Bug c++/105839] internal compiler error: in tsubst_omp_for_iterator with openmp and structured bindings in a template

2023-03-02 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105839

--- Comment #6 from CVS Commits  ---
The master branch has been updated by Jakub Jelinek :

https://gcc.gnu.org/g:f0ef740d54f47ff614eb02e13e8f4cb11dfbb140

commit r13-6407-gf0ef740d54f47ff614eb02e13e8f4cb11dfbb140
Author: Jakub Jelinek 
Date:   Thu Mar 2 09:02:12 2023 +0100

openmp: Fix up error recovery for invalid structured bindings in OpenMP
range for loops [PR105839]

The PR108503 temporary DECL_HAS_VALUE_EXPR_P clearing code can ICE
during recovery, because cp_finish_decomp when it detects errors and
reports them clears DECL_HAS_VALUE_EXPR_P, clears DECL_VALUE_EXPR and
sets TREE_TYPE of the structured binding vars to error_mark_node.
The PR108503 code had an assertion that DECL_HAS_VALUE_EXPR_P is set
so that it can clear it and restore later.

The following patch allows DECL_HAS_VALUE_EXPR_P to be unset if
type is error_mark_node and doesn't set it again in that case.

2023-03-02  Jakub Jelinek  

PR c++/105839
* parser.cc (cp_convert_omp_range_for): Allow in assert
decomp_first_name without DECL_HAS_VALUE_EXPR_P if it has
error_mark_node type.
(cp_finish_omp_range_for): Don't set DECL_HAS_VALUE_EXPR_P back
on decls which have error_mark_node type.

* g++.dg/gomp/pr105839-1.C: New test.
* g++.dg/gomp/pr105839-2.C: New test.

[Bug c++/105839] internal compiler error: in tsubst_omp_for_iterator with openmp and structured bindings in a template

2023-03-01 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105839

--- Comment #5 from Jakub Jelinek  ---
Not on the trunk.  Note, the r13-4460, r13-4461, r13-5379 changes PR84469
changes weren't backported to older branches intentionally, it is quite risky
and had multiple follow-ups.

[Bug c++/105839] internal compiler error: in tsubst_omp_for_iterator with openmp and structured bindings in a template

2023-03-01 Thread northon_patrick3 at yahoo dot ca via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105839

--- Comment #4 from northon_patrick3 at yahoo dot ca ---
Actually is still crash even on valid code:

```
template 
void
foo (const T )
{
  [&] (auto&& y)
  {
#pragma omp parallel for
for (auto&& [v1, v2] : x)
  ;
  } ([]{});
}

struct A { int a, b; };

void
bar ()
{
  A a[10];
  foo (a);
}
```

[Bug c++/105839] internal compiler error: in tsubst_omp_for_iterator with openmp and structured bindings in a template

2023-03-01 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105839

--- Comment #3 from Jakub Jelinek  ---
Created attachment 54564
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54564=edit
gcc13-pr105839.patch

Untested fix for the error recovery issue.

[Bug c++/105839] internal compiler error: in tsubst_omp_for_iterator with openmp and structured bindings in a template

2023-03-01 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105839

Jakub Jelinek  changed:

   What|Removed |Added

   Keywords|ice-on-valid-code   |

--- Comment #2 from Jakub Jelinek  ---
Actually, I don't see how it can be valid.
x (or b1) is const int[10] & and structured binding on int is clearly invalid.
The ICE got fixed in r13-4460-gee4f25999f6832a1c, except that since
r13-5379-gd427407a199a0c276cb02 we ICE again with -fopenmp -std=c++11 (error
recovery
after emitting some errors).