[PATCH] make isScopedEnumerationType look through typedefs

Richard Smith richard at metafoo.co.uk
Tue Jan 13 16:34:26 PST 2015


Thanks for the patch, committed as r225889.

On Fri, Dec 19, 2014 at 3:25 AM, Stephan Bergmann <sbergman at redhat.com>
wrote:

> On 12/19/2014 06:05 AM, Richard Smith wrote:
>
>> LGTM, do you need someone to commit this for you?
>>
>
> yes, please; I don't have commit rights
>
>  On Thu, Dec 18, 2014 at 12:28 AM, Stephan Bergmann <sbergman at redhat.com
>> <mailto:sbergman at redhat.com>> wrote:
>>
>>     On 12/17/2014 08:40 PM, Richard Smith wrote:
>>
>>         The right way to write this is:
>>
>>         -  if (const EnumType *ET = dyn_cast<EnumType>(T))
>>         +  if (const EnumType *ET = T->getAs<EnumType>())
>>
>>
>>     updated patch attached
>>
>>         On Tue, Dec 16, 2014 at 5:51 AM, Rafael EspĂ­ndola
>>         <rafael.espindola at gmail.com <mailto:rafael.espindola at gmail.com>
>>         <mailto:rafael.espindola at __gmail.com
>>         <mailto:rafael.espindola at gmail.com>>> 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
>>         <sbergman at redhat.com <mailto:sbergman at redhat.com>
>>              <mailto:sbergman at redhat.com <mailto:sbergman at redhat.com>>>
>>         wrote:
>>               > ping
>>               >
>>               >
>>               > On 11/25/2014 03:04 PM, Rafael EspĂ­ndola wrote:
>>               >>
>>               >> ccing Richard.
>>               >> On 25 November 2014 at 03:38, Stephan Bergmann
>>              <sbergman at redhat.com <mailto:sbergman at redhat.com>
>>         <mailto:sbergman at redhat.com <mailto:sbergman at redhat.com>>>
>>               >> 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
>>
>>         <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
>>              <sbergman at redhat.com <mailto:sbergman at redhat.com>
>>         <mailto:sbergman at redhat.com <mailto:sbergman at redhat.com>>
>>               >>>>> <mailto:sbergman at redhat.com
>>         <mailto:sbergman at redhat.com> <mailto:sbergman at redhat.com
>>         <mailto:sbergman at redhat.com>>>> 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.
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150113/cbd23a5e/attachment.html>


More information about the cfe-commits mailing list