{"push_id":906338160,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"d4ba9bd25d746870e5a5e5d09a4f24cc3d72ac30","before":"815cde37f487611c4a710a04c849983b37ca4974","commits":[{"sha":"d4ba9bd25d746870e5a5e5d09a4f24cc3d72ac30","author":{"email":"776e353654a03ac098cc06e73184e0fd6ce13b85@apple.com","name":"Devin Coughlin"},"message":"[analyzer] Better detect when C++ object was constructed into existing region.\n\nWhen the analyzer evaluates a CXXConstructExpr, it looks ahead in the CFG for\nthe current block to detect what region the object should be constructed into.\nIf the constructor was directly constructed into a local variable or field\nregion then there is no need to explicitly bind the constructed value to\nthe local or field when analyzing the DeclStmt or CXXCtorInitializer that\ncalled the constructor.\n\nUnfortunately, there were situations in which the CXXConstructExpr was\nconstructed into a temporary region but when evaluating the corresponding\nDeclStmt or CXXCtorInitializer the analyzer assumed the object was constructed\ninto the local or field. This led to spurious warnings about uninitialized\nvalues (PR25777).\n\nTo avoid these false positives, this commit factors out the logic for\ndetermining when a CXXConstructExpr will be directly constructed into existing\nstorage, adds the inverse logic to detect when the corresponding later bind can\nbe safely skipped, and adds assertions to make sure these two checks are in\nsync.\n\nrdar://problem/21947725\n\ngit-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@255859 91177308-0d34-0410-b5e6-96231b3b80d8","distinct":true,"url":"https://api.github.com/repos/llvm-project/clang/commits/d4ba9bd25d746870e5a5e5d09a4f24cc3d72ac30"}]}