<div dir="ltr">Hi Stephan,<div><br></div><div>Per the developer policy [1], please add a test case to accompany your change.</div><div><br></div><div>[1] <a href="http://llvm.org/docs/DeveloperPolicy.html#test-cases">http://llvm.org/docs/DeveloperPolicy.html#test-cases</a></div><div><br></div><div>Looks good otherwise.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 23, 2014 at 12:43 AM, Stephan Bergmann <span dir="ltr"><<a href="mailto:sbergman@redhat.com" target="_blank">sbergman@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[ping]<div class="HOEnZb"><div class="h5"><br>
<br>
On 10/14/2014 04:12 PM, Stephan Bergmann wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
$ clang++ --version<br>
clang version 3.6.0 (trunk 219190)<br>
Target: x86_64-unknown-linux-gnu<br>
Thread model: posix<br>
<br>
$ cat test.cc<br>
enum class E { e };<br>
typedef E E2;<br>
E2 f1() { return E::e; }<br>
E f2() { return E::e; }<br>
bool g1() { return !f1(); }<br>
bool g2() { return !f2(); }<br>
<br>
$ clang++ -std=c++11 -c test.cc<br>
test.cc:6:20: error: invalid argument type 'E' to unary expression<br>
bool g2() { return !f2(); }<br>
                   ^~~~~<br>
1 error generated.<br>
</blockquote>
<br>
rightly complains about the invalid contextual conversion to bool in g2<br>
but erroneously not also about the one in g1.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Index: lib/Sema/SemaExpr.cpp<br>
==============================<u></u>==============================<u></u>=======<br>
--- lib/Sema/SemaExpr.cpp    (revision 219190)<br>
+++ lib/Sema/SemaExpr.cpp    (working copy)<br>
@@ -7414,7 +7414,7 @@<br>
 }<br>
<br>
 static bool isScopedEnumerationType(<u></u>QualType T) {<br>
-  if (const EnumType *ET = dyn_cast<EnumType>(T))<br>
+  if (const EnumType *ET = dyn_cast<EnumType>(T.<u></u>getCanonicalType()))</blockquote></blockquote></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     return ET->getDecl()->isScoped();<br>
   return false;<br>
 }<br>
</blockquote>
<br>
would fix that for me.<br>
<br>
Stephan<br>
</blockquote>
</div></div><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">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></blockquote></div><br></div></div>