[PATCH] make isScopedEnumerationType look through typedefs

Richard Smith richard at metafoo.co.uk
Thu Dec 18 21:05:15 PST 2014


LGTM, do you need someone to commit this for you?

On Thu, Dec 18, 2014 at 12:28 AM, Stephan Bergmann <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>> 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>> 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>>
>>      >> 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
>>     <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/20141218/af144d6a/attachment.html>


More information about the cfe-commits mailing list