Commit 45b999f6 authored by David Malcolm's avatar David Malcolm
Browse files

analyzer: fix ICE on vector casts [PR104159]



PR analyzer/104159 describes an ICE attempting to convert a vector_cst,
which occurs when symbolically executing within a recursive call on:

  _4 = BIT_FIELD_REF <w_3(D), 32, 0>;
  _1 = VIEW_CONVERT_EXPR<T>(_4);

where the BIT_FIELD_REF leads to a get_or_create_cast from
  VEC<long, 8> to VEC<unsigned 4>
which get_code_for_cast erroneously picks NOP_EXPR for the cast, leading
to a bogus input to the VIEW_CONVERT_EXPR.

This patch fixes the issue by giving up on attempts to cast symbolic
values of vector types, treating the result of such casts as unknowable.

gcc/analyzer/ChangeLog:
	PR analyzer/104159
	* region-model-manager.cc
	(region_model_manager::get_or_create_cast): Bail out if the types
	are the same.  Don't attempt to handle casts involving vector
	types.

gcc/testsuite/ChangeLog:
	PR analyzer/104159
	* gcc.dg/analyzer/torture/pr104159.c: New test.

Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
parent 6c1a9310
Supports Markdown
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