[cfe-dev] Fix PR13444 - wrong mangling of "const char * const *" and friends

Timur Iskhodzhanov timurrrr at google.com
Mon Sep 3 01:54:15 PDT 2012


On Fri, Aug 31, 2012 at 8:11 PM, Aaron Ballman <aaron at aaronballman.com> wrote:
> On Fri, Aug 31, 2012 at 7:55 AM, Timur Iskhodzhanov <timurrrr at google.com> wrote:
>> Can you please review this patch?
>> This fixes http://llvm.org/PR13444 as well as a large part of
>> http://llvm.org/PR13182 plus adds quite a few tests.
>>
>>
>> +void MicrosoftCXXNameMangler::manglePointerQualifiers(Qualifiers Quals) {
>> +  // <pointer-cvr-qualifiers> ::= P  # no qualifiers
>> +  //                          ::= Q  # const
>> +  //                          ::= R  # volatile
>> +  //                          ::= S  # const volatile
>> +  if (!Quals.hasVolatile()) {
>> +    if (!Quals.hasConst()) {
>> +      Out << 'P';
>> +    } else {
>> +      Out << 'Q';
>> +    }
>> +  } else {
>> +    if (!Quals.hasConst()) {
>> +      Out << 'R';
>> +    } else {
>> +      Out << 'S';
>> +    }
>> +  }
>> +}
>
> I wonder if this could be made a bit more clear, a la something like this:
>
> bool HasConst = Quals.hasConst();
> bool HasVolatile = Quals.hasVolatile();
>
> if (hasVolatile && hasConst)
>   Out << 'S';
> else if (hasConst)
>   Out << 'Q';
> else if (hasVolatile)
>   Out << 'R';
> else
>   Out << 'P';
>
> As it stands, I had to think about the logic due to the nesting.
Actually what you're suggesting is exactly how I initially wrote it :)
But then I saw MicrosoftCXXNameMangler::mangleQualifiers() and decided
to take that approach.
Let me fix both functions then...

> Other than that, it LGTM.  Thanks!
I suppose your LGTM is enough to commit.

> ~Aaron



More information about the cfe-dev mailing list