aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff options
context:
space:
mode:
authorKristof Umann <dkszelethus@gmail.com>2019-07-03 12:53:19 +0000
committerKristof Umann <dkszelethus@gmail.com>2019-07-03 12:53:19 +0000
commit00aab1d45e1f67fbc265ed5ea4b2230148181970 (patch)
treee288b807ca296ba4aa8fda363994c8b302fa23c0 /llvm/lib/Bitcode/Reader/BitcodeReader.cpp
parent5cf3cc624609b420319acef498becf48cc011c9a (diff)
downloadllvm-00aab1d45e1f67fbc265ed5ea4b2230148181970.zip
llvm-00aab1d45e1f67fbc265ed5ea4b2230148181970.tar.gz
llvm-00aab1d45e1f67fbc265ed5ea4b2230148181970.tar.bz2
[analyzer][CFG] Return the correct terminator condition
For the following terminator statement: if (A && B && C && D) The built CFG is the following: [B5 (ENTRY)] Succs (1): B4 [B1] 1: 10 2: j 3: [B1.2] (ImplicitCastExpr, LValueToRValue, int) 4: [B1.1] / [B1.3] 5: int x = 10 / j; Preds (1): B2 Succs (1): B0 [B2] 1: C 2: [B2.1] (ImplicitCastExpr, LValueToRValue, _Bool) T: if [B4.4] && [B3.2] && [B2.2] Preds (1): B3 Succs (2): B1 B0 [B3] 1: B 2: [B3.1] (ImplicitCastExpr, LValueToRValue, _Bool) T: [B4.4] && [B3.2] && ... Preds (1): B4 Succs (2): B2 B0 [B4] 1: 0 2: int j = 0; 3: A 4: [B4.3] (ImplicitCastExpr, LValueToRValue, _Bool) T: [B4.4] && ... Preds (1): B5 Succs (2): B3 B0 [B0 (EXIT)] Preds (4): B1 B2 B3 B4 However, even though the path of execution in B2 only depends on C's value, CFGBlock::getCondition() would return the entire condition (A && B && C). For B3, it would return A && B. I changed this the actual condition. Differential Revision: https://reviews.llvm.org/D63538 llvm-svn: 365036
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
0 files changed, 0 insertions, 0 deletions