[llvm] r338226 - [MS Demangler] Demangle symbols in function scopes.
David Majnemer via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 29 21:30:07 PDT 2018
On Sun, Jul 29, 2018 at 8:55 PM Zachary Turner <zturner at google.com> wrote:
>
>
> On Sun, Jul 29, 2018 at 8:44 PM David Majnemer <david.majnemer at gmail.com>
> wrote:
>
>> On Sun, Jul 29, 2018 at 8:12 PM Zachary Turner via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>>
>>> +static bool startsWithLocalScopePattern(StringView S) {
>>> + if (!S.consumeFront('?'))
>>> + return false;
>>> + if (S.size() < 2)
>>> + return false;
>>> +
>>> + size_t End = S.find('?');
>>> + if (End == StringView::npos)
>>> + return false;
>>> + StringView Candidate = S.substr(0, End);
>>> + if (Candidate.empty())
>>> + return false;
>>> +
>>> + // \?[0-9]\?
>>> + // ?@? is the discriminator 0.
>>> + if (Candidate.size() == 1)
>>> + return Candidate[0] == '@' || (Candidate[0] >= '0' && Candidate[0]
>>> <= '9');
>>> +
>>> + // If it's not 0-9, then it's an encoded number terminated with an @
>>> + if (Candidate.back() != '@')
>>> + return false;
>>> + Candidate = Candidate.dropBack();
>>> +
>>> + // An encoded number starts with B-P and all subsequent digits are in
>>> A-P.
>>> + // Note that the reason the first digit cannot be A is two fold.
>>> First, it
>>> + // would create an ambiguity with ?A which delimits the beginning of
>>> an
>>> + // anonymous namespace. Second, A represents 0, and you don't start
>>> a multi
>>> + // digit number with a leading 0. Presumably the anonymous namespace
>>> + // ambiguity is also why single digit encoded numbers use 0-9 rather
>>> than A-J.
>>> + if (Candidate[0] < 'B' || Candidate[0] > 'P')
>>>
>>
>> We just did a dropBack(). I think we need to check Candidate.empty()
>> otherwise the range check against 'B' - 'P' will end up accessing Candidate
>> out of bounds.
>> Perhaps something like:
>>
>
> I handled it earlier. Note the `if (Candidate.size() == 1)` branch now
> also returns true if Candidate[0] == '@'.
>
> So if it passes that branch size >= 2. Then if it passes the next branch
> we're guaranteed to have a string of the form S + '@', where S is
> non-empty. So after do the dropBack, we're non-empty.
>
Ah, good call! Sorry for the noise!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180729/6807c6f6/attachment.html>
More information about the llvm-commits
mailing list