Re: r322813 - Fix Scope::dump()
Thanks! r323109. On Sat, Jan 20, 2018 at 12:53 AM, Richard Smithwrote: > 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()
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::pairFlagInfo[] = { >> + {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()
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::pairFlagInfo[] = { > + {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