C++: Treat all `Convert` instructions as dataflow

The AST dataflow library essentially ignores conversions, which is probably the right behavior. Converting an `int` to a `long` preserves the value, even if the bit pattern might be different. It's arguable whether narrowing conversions should be treated as dataflow, but we'll do so for now. We can revisit that if we see it cause problems.
This commit is contained in:
Dave Bartolomeo 2018-11-30 11:15:33 -08:00
Родитель 58f7596519
Коммит ae8f18c0b5
1 изменённых файлов: 3 добавлений и 1 удалений

Просмотреть файл

@ -131,7 +131,9 @@ UninitializedNode uninitializedNode(LocalVariable v) {
*/
predicate localFlowStep(Node nodeFrom, Node nodeTo) {
nodeTo.(CopyInstruction).getSourceValue() = nodeFrom or
nodeTo.(PhiInstruction).getAnOperand().getDefinitionInstruction() = nodeFrom
nodeTo.(PhiInstruction).getAnOperand().getDefinitionInstruction() = nodeFrom or
// Treat all conversions as flow, even conversions between different numeric types.
nodeTo.(ConvertInstruction).getOperand() = nodeFrom
}
/**