PR analyzer/93290 reports an ICE on calls to isnan(). The root cause is that an UNORDERED_EXPR is passed to region_model::eval_condition_without_cm, and there's a stray gcc_unreachable () in the case where we're comparing an svalue against itself. I attempted a more involved patch that properly handled NaN in general but it seems I've baked the assumption of reflexivity too deeply into the constraint_manager code. For now, this patch avoids the ICE and documents the limitation. gcc/analyzer/ChangeLog: PR analyzer/93290 * region-model.cc (region_model::eval_condition_without_cm): Avoid gcc_unreachable for unexpected operations for the case where we're comparing an svalue against itself. gcc/ChangeLog * doc/analyzer.texi (Limitations): Add note about NaN. gcc/testsuite/ChangeLog: PR analyzer/93290 * gcc.dg/analyzer/pr93290.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... | |
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... | |
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... |