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&view=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&r1=322812&r2=322813&view=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 &OS) 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<unsigned, const char *> 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 list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits