[PATCH] make isScopedEnumerationType look through typedefs

Stephan Bergmann sbergman at redhat.com
Tue Dec 16 01:49:12 PST 2014


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> 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.

-------------- 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/20141216/b11ab3e2/attachment.bin>


More information about the cfe-commits mailing list