Thanks! r323109.
On Sat, Jan 20, 2018 at 12:53 AM, Richard Smith <rich...@metafoo.co.uk> wrote: > 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