LookupVisibleDecls does redundant work which was caught by my new assertion (see PR12339) but upon further investigation we found that it's also buggy in some cases. Two new testcases are included.<div><br></div><div>The attached patch works by adding a new iterator on DeclContext which exposes all decls that would be visible through DC->lookup() as an iterator, then LookupVisibleDecls just iterates through those. The fix also allows us to delete some code in code completion.</div>

<div><br></div><div>There is one form of fallout which I don't understand, and I need review for this. In one Objective-C test, the autocomplete priority changed from 37 to 35. It's not clear to me whether that's a bug fixed or a bug introduced, and I'd appreciate some help understanding why prop4 should have been getting the 2-point penalty in test/Index/complete-synthesized.m (and not, say, prop2 which actually is in the base class). It looks from the commit log like that number might not actually be important.</div>

<div><br></div><div>Please review! This patch has Richard Smith approval, subject to the change to the objective-c tests being approved by somebody else.</div><div><br></div><div>Nick</div>