[PATCH] make isScopedEnumerationType look through typedefs

David Majnemer david.majnemer at gmail.com
Thu Oct 23 01:41:00 PDT 2014


Hi Stephan,

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.

On Thu, Oct 23, 2014 at 12:43 AM, Stephan Bergmann <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.
>>
>> Stephan
>>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141023/6968c879/attachment.html>


More information about the cfe-commits mailing list