r201981 - Sema: Simplify away one-iteration loops.
Benjamin Kramer
benny.kra at gmail.com
Mon Feb 24 08:27:48 PST 2014
On 23.02.2014, at 22:16, Arthur O'Dwyer <arthur.j.odwyer at gmail.com> wrote:
> On Sun, Feb 23, 2014 at 6:34 AM, Benjamin Kramer
> <benny.kra at googlemail.com> wrote:
>> Author: d0k
>> Date: Sun Feb 23 08:34:50 2014
>> New Revision: 201981
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=201981&view=rev
>> Log:
>> Sema: Simplify away one-iteration loops.
>>
>> No functionality change.
> […]
>> @@ -7381,10 +7375,7 @@ bool GetMatchingCType(
>> return false;
>>
>> if (VD) {
>> - for (specific_attr_iterator<TypeTagForDatatypeAttr>
>> - I = VD->specific_attr_begin<TypeTagForDatatypeAttr>(),
>> - E = VD->specific_attr_end<TypeTagForDatatypeAttr>();
>> - I != E; ++I) {
>> + if (TypeTagForDatatypeAttr *I = VD->getAttr<TypeTagForDatatypeAttr>()) {
>> if (I->getArgumentKind() != ArgumentKind) {
>> FoundWrongKind = true;
>> return false;
>
> FYI, this does *look* like a functionality change. Compare the loop in
> Sema::FinalizeDeclaration(); a declaration can have more than one
> instance of TypeTagForDatatypeAttr. Looking at just the first one
> *seems* like it would give different results from looking at all of
> them.
>
> If I'm right, then a regression test should definitely be added: one
> that distinguishes the old code's behavior from the new code's
> behavior and decrees which one should be considered "correct".
The old code didn't look at all attributes either, the loop is always terminated
by the "return true;" a couple of lines below. I'm not 100% sure that there is no
case where checking multiple attributes would make sense, but now it's at
least obvious what it does.
- Ben
More information about the cfe-commits
mailing list