Commit c58cb6ac by Jakub Jelinek

inliner: Don't ICE on NULL TYPE_DOMAIN [PR94621]

When I've added the VLA tweak for OpenMP to avoid error_mark_nodes in the IL in
type, I forgot that TYPE_DOMAIN could be NULL.  Furthermore, as an optimization,
this patch checks the hopefully cheapest condition that is very likely false
most of the time (enabled only during OpenMP handling) first.

2020-04-17  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/94621
	* tree-inline.c (remap_type_1): Don't dereference NULL TYPE_DOMAIN.
	Move id->adjust_array_error_bounds check first in the condition.

	* gcc.c-torture/compile/pr94621.c: New test.
parent e9f799d2
2020-04-17 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/94621
* tree-inline.c (remap_type_1): Don't dereference NULL TYPE_DOMAIN.
Move id->adjust_array_error_bounds check first in the condition.
2020-04-17 Martin Liska <mliska@suse.cz> 2020-04-17 Martin Liska <mliska@suse.cz>
Jonathan Yong <10walls@gmail.com> Jonathan Yong <10walls@gmail.com>
......
2020-04-17 Jakub Jelinek <jakub@redhat.com> 2020-04-17 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/94621
* gcc.c-torture/compile/pr94621.c: New test.
PR c++/94314 PR c++/94314
* g++.dg/pr94314-4.C: Require c++14 rather than c++11. * g++.dg/pr94314-4.C: Require c++14 rather than c++11.
......
/* PR tree-optimization/94621 */
struct S { int c, e[]; };
static inline int
foo (struct S *m, int r, int c)
{
int (*a)[][m->c] = (int (*)[][m->c])&m->e;
return (*a)[r][c];
}
void
bar (struct S *a)
{
foo (a, 0, 0);
}
...@@ -556,8 +556,9 @@ remap_type_1 (tree type, copy_body_data *id) ...@@ -556,8 +556,9 @@ remap_type_1 (tree type, copy_body_data *id)
/* For array bounds where we have decided not to copy over the bounds /* For array bounds where we have decided not to copy over the bounds
variable which isn't used in OpenMP/OpenACC region, change them to variable which isn't used in OpenMP/OpenACC region, change them to
an uninitialized VAR_DECL temporary. */ an uninitialized VAR_DECL temporary. */
if (TYPE_MAX_VALUE (TYPE_DOMAIN (new_tree)) == error_mark_node if (id->adjust_array_error_bounds
&& id->adjust_array_error_bounds && TYPE_DOMAIN (new_tree)
&& TYPE_MAX_VALUE (TYPE_DOMAIN (new_tree)) == error_mark_node
&& TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != error_mark_node) && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != error_mark_node)
{ {
tree v = create_tmp_var (TREE_TYPE (TYPE_DOMAIN (new_tree))); tree v = create_tmp_var (TREE_TYPE (TYPE_DOMAIN (new_tree)));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment