The right way to write this is: - if (const EnumType *ET = dyn_cast<EnumType>(T)) + if (const EnumType *ET = T->getAs<EnumType>())
On Tue, Dec 16, 2014 at 5:51 AM, Rafael Espíndola < [email protected]> wrote: > 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
