LGTM. Clang is not my expertise, but the patch looks clearly correct, fixes a bug and has a testcase.
On 16 December 2014 at 04:49, Stephan Bergmann <[email protected]> wrote: > ping > > > On 11/25/2014 03:04 PM, Rafael Espíndola wrote: >> >> ccing Richard. >> On 25 November 2014 at 03:38, Stephan Bergmann <[email protected]> >> wrote: >>> >>> ping >>> >>> >>> On 11/10/2014 06:18 PM, Stephan Bergmann wrote: >>>> >>>> >>>> On 10/23/2014 10:41 AM, David Majnemer wrote: >>>>> >>>>> >>>>> Per the developer policy [1], please add a test case to accompany your >>>>> change. >>>>> >>>>> [1] http://llvm.org/docs/DeveloperPolicy.html#test-cases >>>>> >>>>> Looks good otherwise. >>>> >>>> >>>> >>>> Attached updated patch including test case. >>>> >>>>> On Thu, Oct 23, 2014 at 12:43 AM, Stephan Bergmann <[email protected] >>>>> <mailto:[email protected]>> wrote: >>>>> >>>>> [ping] >>>>> >>>>> >>>>> On 10/14/2014 04:12 PM, Stephan Bergmann wrote: >>>>> >>>>> $ clang++ --version >>>>> clang version 3.6.0 (trunk 219190) >>>>> Target: x86_64-unknown-linux-gnu >>>>> Thread model: posix >>>>> >>>>> $ cat test.cc >>>>> enum class E { e }; >>>>> typedef E E2; >>>>> E2 f1() { return E::e; } >>>>> E f2() { return E::e; } >>>>> bool g1() { return !f1(); } >>>>> bool g2() { return !f2(); } >>>>> >>>>> $ clang++ -std=c++11 -c test.cc >>>>> test.cc:6:20: error: invalid argument type 'E' to unary >>>>> expression >>>>> bool g2() { return !f2(); } >>>>> ^~~~~ >>>>> 1 error generated. >>>>> >>>>> >>>>> rightly complains about the invalid contextual conversion to >>>>> bool in g2 >>>>> but erroneously not also about the one in g1. >>>>> >>>>> Index: lib/Sema/SemaExpr.cpp >>>>> >>>>> ==============================__==============================__======= >>>>> --- lib/Sema/SemaExpr.cpp (revision 219190) >>>>> +++ lib/Sema/SemaExpr.cpp (working copy) >>>>> @@ -7414,7 +7414,7 @@ >>>>> } >>>>> >>>>> static bool isScopedEnumerationType(__QualType T) { >>>>> - if (const EnumType *ET = dyn_cast<EnumType>(T)) >>>>> + if (const EnumType *ET = >>>>> dyn_cast<EnumType>(T.__getCanonicalType())) >>>>> >>>>> return ET->getDecl()->isScoped(); >>>>> return false; >>>>> } >>>>> >>>>> >>>>> would fix that for me. > > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
