PR analyzer/94099 and PR analyzer/94105 both report ICEs relating to calling region_model::get_lvalue on a NOP_EXPR. PR analyzer/94099's ICE happens when generating a checker_path when encountering an unhandled tree code (NOP_EXPR) in get_lvalue with a NULL context (from for_each_state_change). PR analyzer/94105 ICE happens when handling an ARRAY_REF where the first operand is a NOP_EXPR: the unhandled tree code gives us a symbolic_region, but the case for ARRAY_REF assumes we have an array_region. This patch fixes the ICEs by handling NOP_EXPR within region_model::get_lvalue, and bulletproofs both of the above sources of failure. gcc/analyzer/ChangeLog: PR analyzer/94099 PR analyzer/94105 * diagnostic-manager.cc (for_each_state_change): Bulletproof against errors in get_rvalue by passing a tentative_region_model_context and rejecting if there's an error. * region-model.cc (region_model::get_lvalue_1): When handling ARRAY_REF, handle results of error-handling. Handle NOP_EXPR. gcc/testsuite/ChangeLog: PR analyzer/94099 PR analyzer/94105 * gcc.dg/analyzer/pr94099.c: New test. * gcc.dg/analyzer/pr94105.c: New test.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| ChangeLog | Loading commit data... | |
| analysis-plan.cc | Loading commit data... | |
| analysis-plan.h | Loading commit data... | |
| analyzer-logging.cc | Loading commit data... | |
| analyzer-logging.h | Loading commit data... | |
| analyzer-pass.cc | Loading commit data... | |
| analyzer-selftests.cc | Loading commit data... | |
| analyzer-selftests.h | Loading commit data... | |
| analyzer.cc | Loading commit data... | |
| analyzer.h | Loading commit data... | |
| analyzer.opt | Loading commit data... | |
| bar-chart.cc | Loading commit data... | |
| bar-chart.h | Loading commit data... | |
| call-string.cc | Loading commit data... | |
| call-string.h | Loading commit data... | |
| checker-path.cc | Loading commit data... | |
| checker-path.h | Loading commit data... | |
| constraint-manager.cc | Loading commit data... | |
| constraint-manager.h | Loading commit data... | |
| diagnostic-manager.cc | Loading commit data... | |
| diagnostic-manager.h | Loading commit data... | |
| engine.cc | Loading commit data... | |
| engine.h | Loading commit data... | |
| exploded-graph.h | Loading commit data... | |
| function-set.cc | Loading commit data... | |
| function-set.h | Loading commit data... | |
| pending-diagnostic.cc | Loading commit data... | |
| pending-diagnostic.h | Loading commit data... | |
| program-point.cc | Loading commit data... | |
| program-point.h | Loading commit data... | |
| program-state.cc | Loading commit data... | |
| program-state.h | Loading commit data... | |
| reachability.h | Loading commit data... | |
| region-model.cc | Loading commit data... | |
| region-model.h | Loading commit data... | |
| sm-file.cc | Loading commit data... | |
| sm-malloc.cc | Loading commit data... | |
| sm-malloc.dot | Loading commit data... | |
| sm-pattern-test.cc | Loading commit data... | |
| sm-sensitive.cc | Loading commit data... | |
| sm-signal.cc | Loading commit data... | |
| sm-taint.cc | Loading commit data... | |
| sm.cc | Loading commit data... | |
| sm.h | Loading commit data... | |
| state-purge.cc | Loading commit data... | |
| state-purge.h | Loading commit data... | |
| supergraph.cc | Loading commit data... | |
| supergraph.h | Loading commit data... |