[PATCH] D57747: [Sema] SequenceChecker: Fix handling of operator ||, && and ?:
Bruno Ricci via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 5 05:26:05 PST 2019
riccibruno created this revision.
riccibruno added reviewers: aaron.ballman, rsmith.
riccibruno added a project: clang.
Herald added a subscriber: cfe-commits.
The current handling of the operators `||`, `&&` and `?:` has a number of false positive and false negative. The issues for operator `||` and `&&` are:
1. We need to add sequencing regions for the LHS and RHS as is done for the comma operator. Not doing so causes false positives in expressions like `((a++, false) || (a++, false));` (from PR39779, see PR22197 for another example).
2. In the current implementation when the evaluation of the LHS fails, the RHS is added to a worklist to be processed later. This results in false negatives in expressions like `(a && a++) + a`.
Fix these issues by introducing sequencing regions for the LHS and RHS, and by not deferring the visitation of the RHS.
The issues with the ternary operator `?:` are similar, with the added twist that we should not warn on expressions like `(x ? y += 1 : y += 2)` since exactly one of the 2nd and 3rd expression is going to be evaluated, but we should still warn on expressions like `(x ? y += 1 : y += 2) = y`.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 13264 bytes
Desc: not available
More information about the cfe-commits