analyzer: fix ICE on pointer arithmetic with incomplete types [PR 93774]
authorDavid Malcolm <dmalcolm@redhat.com>
Mon, 17 Feb 2020 14:18:39 +0000 (09:18 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Tue, 18 Feb 2020 13:12:06 +0000 (08:12 -0500)
commita674c7b8b8028c5d7e52dd38783e8e2b02034b63
treec5aaa4e81dd37da06b6b6a74c77efa2ea63b502e
parent68f9c41d54a7839e90d10e1400c8726c8ccde88d
analyzer: fix ICE on pointer arithmetic with incomplete types [PR 93774]

PR analyzer/93774 reports an ICE in gfortran with -fanalyzer within
region_model::convert_byte_offset_to_array_index on a pointer of
incomplete type ("character(kind=1)[0:][1:0] * restrict").

This patch bulletproofs the routine against incomplete types, fixing
the ICE.

gcc/analyzer/ChangeLog:
PR analyzer/93774
* region-model.cc
(region_model::convert_byte_offset_to_array_index): Use
int_size_in_bytes before calling size_in_bytes, to gracefully fail
on incomplete types.

gcc/testsuite/ChangeLog:
PR analyzer/93774
* gfortran.dg/analyzer/deferred_character_25.f90: New test,
based on gfortran.dg/deferred_character_25.f90.
gcc/analyzer/ChangeLog
gcc/analyzer/region-model.cc
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/analyzer/deferred_character_25.f90 [new file with mode: 0644]