<div dir="ltr"><div style>I failed to produce a concise explanation of the patch, so I'll lead off with the testcase:</div><div style><br></div><div style>  struct Base { virtual void fn() { } };</div><div style>  struct Derived : public Base { virtual void fn() = 0;</div>

<div style>    void test() { Base::fn(); /* triggers an ODR-use of Derived::fn() */ }</div><div style>  };</div><div style><br></div><div style>This is because we repurpose the odr bit on virtual functions to mean "it would be convenient for codegen to emit this", to help devirtualization for instance. This is implemented in Sema with a scan through all known derived classes when building a member expression, in this case "this->Base::fn". This patch makes that scan skip pure methods.</div>

<div style><br></div><div style>Patch attached, please review.<br></div><div style><br></div><div style>Nick</div><div style><br></div></div>