[PATCH] make isScopedEnumerationType look through typedefs

Rafael EspĂ­ndola rafael.espindola at gmail.com
Tue Nov 25 06:04:22 PST 2014


ccing Richard.

On 25 November 2014 at 03:38, Stephan Bergmann <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>> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>



More information about the cfe-commits mailing list