-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Open
Labels
questionFurther information is requestedFurther information is requested
Description
The controls predicate in GuardCondition fails to detect a control flow influence from a nested if. In the following example the influence from condition to call() is only revealed in the first if, but not in the second.
#include <exception>
void call()
{
}
void my_fn(bool outer, bool condition)
{
if (condition) // detected
{
throw std::exception();
}
if (outer)
{
if (condition) // not detected
{
throw std::exception();
}
}
call();
}Query I tried:
import cpp
import semmle.code.cpp.controlflow.IRGuards
from Variable v, VariableAccess va, GuardCondition cond, Call c, int line
where
c.getTarget().getName() = "call" and
va.getTarget() = v and
v.getName() = "condition" and
cond.getAChild*() = va and
cond.controls(c.getBasicBlock(), _) and
line = va.getLocation().getStartLine()
select v, va, cond, c, lineOutput I received:
| v | va | cond | c | line |
+-----------+-----------+-----------+--------------+------+
| condition | condition | condition | call to call | 10 |
I expected to also see an influence from line 17, but none is being found.
CodeQL version: 2.19.3
Metadata
Metadata
Assignees
Labels
questionFurther information is requestedFurther information is requested