[PATCH] make isScopedEnumerationType look through typedefs

Stephan Bergmann sbergman at redhat.com
Tue Nov 25 00:38:07 PST 2014


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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: isScopedEnumerationType.patch
Type: text/x-patch
Size: 913 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141125/05dbf4b6/attachment.bin>


More information about the cfe-commits mailing list