Re: r322813 - Fix Scope::dump()

2018-01-22 Thread Hans Wennborg via cfe-commits
Thanks! r323109.

On Sat, Jan 20, 2018 at 12:53 AM, Richard Smith  wrote:
> Sounds like a good idea to me.
>
> On 19 Jan 2018 15:23, "Richard Trieu via cfe-commits"
>  wrote:
>>
>> Hans,
>>
>> I recommend merging this revision into the release.  It fixes an infinite
>> loop in Scope::dump()
>>
>> Richard
>>
>> On Wed, Jan 17, 2018 at 8:28 PM, Richard Trieu via cfe-commits
>>  wrote:
>>>
>>> Author: rtrieu
>>> Date: Wed Jan 17 20:28:56 2018
>>> New Revision: 322813
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=322813=rev
>>> Log:
>>> Fix Scope::dump()
>>>
>>> The dump function for Scope only has 20 out of the 24 flags.  Since it
>>> looped
>>> until no flags were left, having an unknown flag lead to an infinite
>>> loop.
>>> That loop has been changed to a single pass for each flag, plus an assert
>>> to
>>> alert if new flags are added.
>>>
>>> Modified:
>>> cfe/trunk/lib/Sema/Scope.cpp
>>>
>>> Modified: cfe/trunk/lib/Sema/Scope.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Scope.cpp?rev=322813=322812=322813=diff
>>>
>>> ==
>>> --- cfe/trunk/lib/Sema/Scope.cpp (original)
>>> +++ cfe/trunk/lib/Sema/Scope.cpp Wed Jan 17 20:28:56 2018
>>> @@ -143,72 +143,43 @@ void Scope::dumpImpl(raw_ostream ) co
>>>if (HasFlags)
>>>  OS << "Flags: ";
>>>
>>> -  while (Flags) {
>>> -if (Flags & FnScope) {
>>> -  OS << "FnScope";
>>> -  Flags &= ~FnScope;
>>> -} else if (Flags & BreakScope) {
>>> -  OS << "BreakScope";
>>> -  Flags &= ~BreakScope;
>>> -} else if (Flags & ContinueScope) {
>>> -  OS << "ContinueScope";
>>> -  Flags &= ~ContinueScope;
>>> -} else if (Flags & DeclScope) {
>>> -  OS << "DeclScope";
>>> -  Flags &= ~DeclScope;
>>> -} else if (Flags & ControlScope) {
>>> -  OS << "ControlScope";
>>> -  Flags &= ~ControlScope;
>>> -} else if (Flags & ClassScope) {
>>> -  OS << "ClassScope";
>>> -  Flags &= ~ClassScope;
>>> -} else if (Flags & BlockScope) {
>>> -  OS << "BlockScope";
>>> -  Flags &= ~BlockScope;
>>> -} else if (Flags & TemplateParamScope) {
>>> -  OS << "TemplateParamScope";
>>> -  Flags &= ~TemplateParamScope;
>>> -} else if (Flags & FunctionPrototypeScope) {
>>> -  OS << "FunctionPrototypeScope";
>>> -  Flags &= ~FunctionPrototypeScope;
>>> -} else if (Flags & FunctionDeclarationScope) {
>>> -  OS << "FunctionDeclarationScope";
>>> -  Flags &= ~FunctionDeclarationScope;
>>> -} else if (Flags & AtCatchScope) {
>>> -  OS << "AtCatchScope";
>>> -  Flags &= ~AtCatchScope;
>>> -} else if (Flags & ObjCMethodScope) {
>>> -  OS << "ObjCMethodScope";
>>> -  Flags &= ~ObjCMethodScope;
>>> -} else if (Flags & SwitchScope) {
>>> -  OS << "SwitchScope";
>>> -  Flags &= ~SwitchScope;
>>> -} else if (Flags & TryScope) {
>>> -  OS << "TryScope";
>>> -  Flags &= ~TryScope;
>>> -} else if (Flags & FnTryCatchScope) {
>>> -  OS << "FnTryCatchScope";
>>> -  Flags &= ~FnTryCatchScope;
>>> -} else if (Flags & SEHTryScope) {
>>> -  OS << "SEHTryScope";
>>> -  Flags &= ~SEHTryScope;
>>> -} else if (Flags & SEHExceptScope) {
>>> -  OS << "SEHExceptScope";
>>> -  Flags &= ~SEHExceptScope;
>>> -} else if (Flags & OpenMPDirectiveScope) {
>>> -  OS << "OpenMPDirectiveScope";
>>> -  Flags &= ~OpenMPDirectiveScope;
>>> -} else if (Flags & OpenMPLoopDirectiveScope) {
>>> -  OS << "OpenMPLoopDirectiveScope";
>>> -  Flags &= ~OpenMPLoopDirectiveScope;
>>> -} else if (Flags & OpenMPSimdDirectiveScope) {
>>> -  OS << "OpenMPSimdDirectiveScope";
>>> -  Flags &= ~OpenMPSimdDirectiveScope;
>>> -}
>>> +  std::pair FlagInfo[] = {
>>> +  {FnScope, "FnScope"},
>>> +  {BreakScope, "BreakScope"},
>>> +  {ContinueScope, "ContinueScope"},
>>> +  {DeclScope, "DeclScope"},
>>> +  {ControlScope, "ControlScope"},
>>> +  {ClassScope, "ClassScope"},
>>> +  {BlockScope, "BlockScope"},
>>> +  {TemplateParamScope, "TemplateParamScope"},
>>> +  {FunctionPrototypeScope, "FunctionPrototypeScope"},
>>> +  {FunctionDeclarationScope, "FunctionDeclarationScope"},
>>> +  {AtCatchScope, "AtCatchScope"},
>>> +  {ObjCMethodScope, "ObjCMethodScope"},
>>> +  {SwitchScope, "SwitchScope"},
>>> +  {TryScope, "TryScope"},
>>> +  {FnTryCatchScope, "FnTryCatchScope"},
>>> +  {OpenMPDirectiveScope, "OpenMPDirectiveScope"},
>>> +  {OpenMPLoopDirectiveScope, "OpenMPLoopDirectiveScope"},
>>> +  {OpenMPSimdDirectiveScope, "OpenMPSimdDirectiveScope"},
>>> +  {EnumScope, "EnumScope"},
>>> +  {SEHTryScope, "SEHTryScope"},
>>> +  {SEHExceptScope, "SEHExceptScope"},
>>> +  {SEHFilterScope, "SEHFilterScope"},
>>> +  

Re: r322813 - Fix Scope::dump()

2018-01-19 Thread Richard Smith via cfe-commits
Sounds like a good idea to me.

On 19 Jan 2018 15:23, "Richard Trieu via cfe-commits" <
cfe-commits@lists.llvm.org> wrote:

> Hans,
>
> I recommend merging this revision into the release.  It fixes an infinite
> loop in Scope::dump()
>
> Richard
>
> On Wed, Jan 17, 2018 at 8:28 PM, Richard Trieu via cfe-commits <
> cfe-commits@lists.llvm.org> wrote:
>
>> Author: rtrieu
>> Date: Wed Jan 17 20:28:56 2018
>> New Revision: 322813
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=322813=rev
>> Log:
>> Fix Scope::dump()
>>
>> The dump function for Scope only has 20 out of the 24 flags.  Since it
>> looped
>> until no flags were left, having an unknown flag lead to an infinite loop.
>> That loop has been changed to a single pass for each flag, plus an assert
>> to
>> alert if new flags are added.
>>
>> Modified:
>> cfe/trunk/lib/Sema/Scope.cpp
>>
>> Modified: cfe/trunk/lib/Sema/Scope.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Scope
>> .cpp?rev=322813=322812=322813=diff
>> 
>> ==
>> --- cfe/trunk/lib/Sema/Scope.cpp (original)
>> +++ cfe/trunk/lib/Sema/Scope.cpp Wed Jan 17 20:28:56 2018
>> @@ -143,72 +143,43 @@ void Scope::dumpImpl(raw_ostream ) co
>>if (HasFlags)
>>  OS << "Flags: ";
>>
>> -  while (Flags) {
>> -if (Flags & FnScope) {
>> -  OS << "FnScope";
>> -  Flags &= ~FnScope;
>> -} else if (Flags & BreakScope) {
>> -  OS << "BreakScope";
>> -  Flags &= ~BreakScope;
>> -} else if (Flags & ContinueScope) {
>> -  OS << "ContinueScope";
>> -  Flags &= ~ContinueScope;
>> -} else if (Flags & DeclScope) {
>> -  OS << "DeclScope";
>> -  Flags &= ~DeclScope;
>> -} else if (Flags & ControlScope) {
>> -  OS << "ControlScope";
>> -  Flags &= ~ControlScope;
>> -} else if (Flags & ClassScope) {
>> -  OS << "ClassScope";
>> -  Flags &= ~ClassScope;
>> -} else if (Flags & BlockScope) {
>> -  OS << "BlockScope";
>> -  Flags &= ~BlockScope;
>> -} else if (Flags & TemplateParamScope) {
>> -  OS << "TemplateParamScope";
>> -  Flags &= ~TemplateParamScope;
>> -} else if (Flags & FunctionPrototypeScope) {
>> -  OS << "FunctionPrototypeScope";
>> -  Flags &= ~FunctionPrototypeScope;
>> -} else if (Flags & FunctionDeclarationScope) {
>> -  OS << "FunctionDeclarationScope";
>> -  Flags &= ~FunctionDeclarationScope;
>> -} else if (Flags & AtCatchScope) {
>> -  OS << "AtCatchScope";
>> -  Flags &= ~AtCatchScope;
>> -} else if (Flags & ObjCMethodScope) {
>> -  OS << "ObjCMethodScope";
>> -  Flags &= ~ObjCMethodScope;
>> -} else if (Flags & SwitchScope) {
>> -  OS << "SwitchScope";
>> -  Flags &= ~SwitchScope;
>> -} else if (Flags & TryScope) {
>> -  OS << "TryScope";
>> -  Flags &= ~TryScope;
>> -} else if (Flags & FnTryCatchScope) {
>> -  OS << "FnTryCatchScope";
>> -  Flags &= ~FnTryCatchScope;
>> -} else if (Flags & SEHTryScope) {
>> -  OS << "SEHTryScope";
>> -  Flags &= ~SEHTryScope;
>> -} else if (Flags & SEHExceptScope) {
>> -  OS << "SEHExceptScope";
>> -  Flags &= ~SEHExceptScope;
>> -} else if (Flags & OpenMPDirectiveScope) {
>> -  OS << "OpenMPDirectiveScope";
>> -  Flags &= ~OpenMPDirectiveScope;
>> -} else if (Flags & OpenMPLoopDirectiveScope) {
>> -  OS << "OpenMPLoopDirectiveScope";
>> -  Flags &= ~OpenMPLoopDirectiveScope;
>> -} else if (Flags & OpenMPSimdDirectiveScope) {
>> -  OS << "OpenMPSimdDirectiveScope";
>> -  Flags &= ~OpenMPSimdDirectiveScope;
>> -}
>> +  std::pair FlagInfo[] = {
>> +  {FnScope, "FnScope"},
>> +  {BreakScope, "BreakScope"},
>> +  {ContinueScope, "ContinueScope"},
>> +  {DeclScope, "DeclScope"},
>> +  {ControlScope, "ControlScope"},
>> +  {ClassScope, "ClassScope"},
>> +  {BlockScope, "BlockScope"},
>> +  {TemplateParamScope, "TemplateParamScope"},
>> +  {FunctionPrototypeScope, "FunctionPrototypeScope"},
>> +  {FunctionDeclarationScope, "FunctionDeclarationScope"},
>> +  {AtCatchScope, "AtCatchScope"},
>> +  {ObjCMethodScope, "ObjCMethodScope"},
>> +  {SwitchScope, "SwitchScope"},
>> +  {TryScope, "TryScope"},
>> +  {FnTryCatchScope, "FnTryCatchScope"},
>> +  {OpenMPDirectiveScope, "OpenMPDirectiveScope"},
>> +  {OpenMPLoopDirectiveScope, "OpenMPLoopDirectiveScope"},
>> +  {OpenMPSimdDirectiveScope, "OpenMPSimdDirectiveScope"},
>> +  {EnumScope, "EnumScope"},
>> +  {SEHTryScope, "SEHTryScope"},
>> +  {SEHExceptScope, "SEHExceptScope"},
>> +  {SEHFilterScope, "SEHFilterScope"},
>> +  {CompoundStmtScope, "CompoundStmtScope"},
>> +  {ClassInheritanceScope, "ClassInheritanceScope"}};
>>
>> -if (Flags)
>> -  OS << " | ";
>> +  for (auto Info : FlagInfo) {
>> +if (Flags & Info.first) {
>> +  OS << Info.second;
>> + 

Re: r322813 - Fix Scope::dump()

2018-01-19 Thread Richard Trieu via cfe-commits
Hans,

I recommend merging this revision into the release.  It fixes an infinite
loop in Scope::dump()

Richard

On Wed, Jan 17, 2018 at 8:28 PM, Richard Trieu via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Author: rtrieu
> Date: Wed Jan 17 20:28:56 2018
> New Revision: 322813
>
> URL: http://llvm.org/viewvc/llvm-project?rev=322813=rev
> Log:
> Fix Scope::dump()
>
> The dump function for Scope only has 20 out of the 24 flags.  Since it
> looped
> until no flags were left, having an unknown flag lead to an infinite loop.
> That loop has been changed to a single pass for each flag, plus an assert
> to
> alert if new flags are added.
>
> Modified:
> cfe/trunk/lib/Sema/Scope.cpp
>
> Modified: cfe/trunk/lib/Sema/Scope.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Scope
> .cpp?rev=322813=322812=322813=diff
> 
> ==
> --- cfe/trunk/lib/Sema/Scope.cpp (original)
> +++ cfe/trunk/lib/Sema/Scope.cpp Wed Jan 17 20:28:56 2018
> @@ -143,72 +143,43 @@ void Scope::dumpImpl(raw_ostream ) co
>if (HasFlags)
>  OS << "Flags: ";
>
> -  while (Flags) {
> -if (Flags & FnScope) {
> -  OS << "FnScope";
> -  Flags &= ~FnScope;
> -} else if (Flags & BreakScope) {
> -  OS << "BreakScope";
> -  Flags &= ~BreakScope;
> -} else if (Flags & ContinueScope) {
> -  OS << "ContinueScope";
> -  Flags &= ~ContinueScope;
> -} else if (Flags & DeclScope) {
> -  OS << "DeclScope";
> -  Flags &= ~DeclScope;
> -} else if (Flags & ControlScope) {
> -  OS << "ControlScope";
> -  Flags &= ~ControlScope;
> -} else if (Flags & ClassScope) {
> -  OS << "ClassScope";
> -  Flags &= ~ClassScope;
> -} else if (Flags & BlockScope) {
> -  OS << "BlockScope";
> -  Flags &= ~BlockScope;
> -} else if (Flags & TemplateParamScope) {
> -  OS << "TemplateParamScope";
> -  Flags &= ~TemplateParamScope;
> -} else if (Flags & FunctionPrototypeScope) {
> -  OS << "FunctionPrototypeScope";
> -  Flags &= ~FunctionPrototypeScope;
> -} else if (Flags & FunctionDeclarationScope) {
> -  OS << "FunctionDeclarationScope";
> -  Flags &= ~FunctionDeclarationScope;
> -} else if (Flags & AtCatchScope) {
> -  OS << "AtCatchScope";
> -  Flags &= ~AtCatchScope;
> -} else if (Flags & ObjCMethodScope) {
> -  OS << "ObjCMethodScope";
> -  Flags &= ~ObjCMethodScope;
> -} else if (Flags & SwitchScope) {
> -  OS << "SwitchScope";
> -  Flags &= ~SwitchScope;
> -} else if (Flags & TryScope) {
> -  OS << "TryScope";
> -  Flags &= ~TryScope;
> -} else if (Flags & FnTryCatchScope) {
> -  OS << "FnTryCatchScope";
> -  Flags &= ~FnTryCatchScope;
> -} else if (Flags & SEHTryScope) {
> -  OS << "SEHTryScope";
> -  Flags &= ~SEHTryScope;
> -} else if (Flags & SEHExceptScope) {
> -  OS << "SEHExceptScope";
> -  Flags &= ~SEHExceptScope;
> -} else if (Flags & OpenMPDirectiveScope) {
> -  OS << "OpenMPDirectiveScope";
> -  Flags &= ~OpenMPDirectiveScope;
> -} else if (Flags & OpenMPLoopDirectiveScope) {
> -  OS << "OpenMPLoopDirectiveScope";
> -  Flags &= ~OpenMPLoopDirectiveScope;
> -} else if (Flags & OpenMPSimdDirectiveScope) {
> -  OS << "OpenMPSimdDirectiveScope";
> -  Flags &= ~OpenMPSimdDirectiveScope;
> -}
> +  std::pair FlagInfo[] = {
> +  {FnScope, "FnScope"},
> +  {BreakScope, "BreakScope"},
> +  {ContinueScope, "ContinueScope"},
> +  {DeclScope, "DeclScope"},
> +  {ControlScope, "ControlScope"},
> +  {ClassScope, "ClassScope"},
> +  {BlockScope, "BlockScope"},
> +  {TemplateParamScope, "TemplateParamScope"},
> +  {FunctionPrototypeScope, "FunctionPrototypeScope"},
> +  {FunctionDeclarationScope, "FunctionDeclarationScope"},
> +  {AtCatchScope, "AtCatchScope"},
> +  {ObjCMethodScope, "ObjCMethodScope"},
> +  {SwitchScope, "SwitchScope"},
> +  {TryScope, "TryScope"},
> +  {FnTryCatchScope, "FnTryCatchScope"},
> +  {OpenMPDirectiveScope, "OpenMPDirectiveScope"},
> +  {OpenMPLoopDirectiveScope, "OpenMPLoopDirectiveScope"},
> +  {OpenMPSimdDirectiveScope, "OpenMPSimdDirectiveScope"},
> +  {EnumScope, "EnumScope"},
> +  {SEHTryScope, "SEHTryScope"},
> +  {SEHExceptScope, "SEHExceptScope"},
> +  {SEHFilterScope, "SEHFilterScope"},
> +  {CompoundStmtScope, "CompoundStmtScope"},
> +  {ClassInheritanceScope, "ClassInheritanceScope"}};
>
> -if (Flags)
> -  OS << " | ";
> +  for (auto Info : FlagInfo) {
> +if (Flags & Info.first) {
> +  OS << Info.second;
> +  Flags &= ~Info.first;
> +  if (Flags)
> +OS << " | ";
> +}
>}
> +
> +  assert(Flags == 0 && "Unknown scope flags");
> +
>if (HasFlags)
>  OS << '\n';
>
>
>
> ___
> cfe-commits mailing