<div dir="ltr">Committed with Richard's review comments in mind in r187715.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Aug 4, 2013 at 5:35 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">LGTM</p><div class="im">
<p dir="ltr">On 4 Aug 2013 00:31, "David Majnemer" <<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>> wrote:<br>
><br>
> Sema::PerformObjectMemberConversion assumed that the Qualifier it was<br>
> given holds a type.  However, the specifier could hold just a namespace.<br>
> In this case, we should ignore the qualifier and not attempt to cast to<br>
> it.<br>
><br>
> <a href="http://llvm-reviews.chandlerc.com/D1283" target="_blank">http://llvm-reviews.chandlerc.com/D1283</a><br>
><br>
> Files:<br>
>   lib/Sema/SemaExpr.cpp<br>
>   test/SemaCXX/PR16709.cpp<br>
><br>
> Index: lib/Sema/SemaExpr.cpp<br>
> ===================================================================<br>
> --- lib/Sema/SemaExpr.cpp<br>
> +++ lib/Sema/SemaExpr.cpp<br>
> @@ -2311,7 +2311,7 @@<br>
>    //     x = 17; // error: ambiguous base subobjects<br>
>    //     Derived1::x = 17; // okay, pick the Base subobject of Derived1<br>
>    //   }<br>
> -  if (Qualifier) {<br>
> +  if (Qualifier && Qualifier->getAsType()) {<br>
>      QualType QType = QualType(Qualifier->getAsType(), 0);<br>
>      assert(!QType.isNull() && "lookup done with dependent qualifier?");</p>
</div><p dir="ltr">This assert looks trivially impossible now. Remove?</p><div class="im">
<p dir="ltr">>      assert(QType->isRecordType() && "lookup done with non-record type");<br>
> Index: test/SemaCXX/PR16709.cpp<br>
> ===================================================================<br>
> --- /dev/null<br>
> +++ test/SemaCXX/PR16709.cpp</p>
</div><p dir="ltr">Please fold this into an existing test file.</p>
<p dir="ltr"></p><div class="im">> @@ -0,0 +1,13 @@<br>
> +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s<br>
> +<br>
> +namespace Foo {<br>
> +struct Base {<br>
> +  void Bar() {} // expected-note{{'Bar' declared here}}<br>
> +};<br>
> +}<br>
> +<br>
> +struct Derived : public Foo::Base {<br>
> +  void test() {<br>
> +    Foo::Bar(); // expected-error{{no member named 'Bar' in namespace 'Foo'; did you mean simply 'Bar'?}}<br>
> +  }<br>
> +};<br>
><br></div>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
><br>
<p></p>
</blockquote></div><br></div>