[PATCH] make isScopedEnumerationType look through typedefs

Rafael EspĂ­ndola rafael.espindola at gmail.com
Tue Dec 16 05:51:47 PST 2014


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




More information about the cfe-commits mailing list