r203293 - [C++11] Revert uses of lambdas with array_pod_sort.

Jordan Rose jordan_rose at apple.com
Fri Mar 7 14:04:07 PST 2014


That's...unfortunate. What are the details here?

Jordan


On Mar 7, 2014, at 13:51, Benjamin Kramer <benny.kra at googlemail.com> wrote:

> Author: d0k
> Date: Fri Mar  7 15:51:58 2014
> New Revision: 203293
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=203293&view=rev
> Log:
> [C++11] Revert uses of lambdas with array_pod_sort.
> 
> Looks like GCC implements the lambda->function pointer conversion differently.
> 
> Modified:
>    cfe/trunk/lib/Analysis/ReachableCode.cpp
>    cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp
>    cfe/trunk/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp
>    cfe/trunk/tools/libclang/CIndex.cpp
> 
> Modified: cfe/trunk/lib/Analysis/ReachableCode.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/ReachableCode.cpp?rev=203293&r1=203292&r2=203293&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Analysis/ReachableCode.cpp (original)
> +++ cfe/trunk/lib/Analysis/ReachableCode.cpp Fri Mar  7 15:51:58 2014
> @@ -400,6 +400,15 @@ const Stmt *DeadCodeScan::findDeadCode(c
>   return 0;
> }
> 
> +static int SrcCmp(const std::pair<const CFGBlock *, const Stmt *> *p1,
> +                  const std::pair<const CFGBlock *, const Stmt *> *p2) {
> +  if (p1->second->getLocStart() < p2->second->getLocStart())
> +    return -1;
> +  if (p2->second->getLocStart() < p1->second->getLocStart())
> +    return 1;
> +  return 0;
> +}
> +
> unsigned DeadCodeScan::scanBackwards(const clang::CFGBlock *Start,
>                                      clang::reachable_code::Callback &CB) {
> 
> @@ -448,13 +457,7 @@ unsigned DeadCodeScan::scanBackwards(con
>   // If we didn't find a dead root, then report the dead code with the
>   // earliest location.
>   if (!DeferredLocs.empty()) {
> -    llvm::array_pod_sort(DeferredLocs.begin(), DeferredLocs.end(),
> -                         [](const DeferredLocsTy::value_type *p1,
> -                            const DeferredLocsTy::value_type *p2) {
> -      if (p1->second->getLocStart() != p2->second->getLocStart())
> -        return p1->second->getLocStart() < p2->second->getLocStart() ? -1 : 1;
> -      return 0;
> -    });
> +    llvm::array_pod_sort(DeferredLocs.begin(), DeferredLocs.end(), SrcCmp);
>     for (DeferredLocsTy::iterator I = DeferredLocs.begin(),
>          E = DeferredLocs.end(); I != E; ++I) {
>       const CFGBlock *Block = I->first;
> 
> Modified: cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp?rev=203293&r1=203292&r2=203293&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp (original)
> +++ cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp Fri Mar  7 15:51:58 2014
> @@ -678,6 +678,11 @@ static void PrintPreprocessedTokens(Prep
>   }
> }
> 
> +typedef std::pair<const IdentifierInfo *, MacroInfo *> id_macro_pair;
> +static int MacroIDCompare(const id_macro_pair *LHS, const id_macro_pair *RHS) {
> +  return LHS->first->getName().compare(RHS->first->getName());
> +}
> +
> static void DoPrintMacros(Preprocessor &PP, raw_ostream *OS) {
>   // Ignore unknown pragmas.
>   PP.AddPragmaHandler(new EmptyPragmaHandler());
> @@ -690,17 +695,13 @@ static void DoPrintMacros(Preprocessor &
>   do PP.Lex(Tok);
>   while (Tok.isNot(tok::eof));
> 
> -  typedef std::pair<const IdentifierInfo *, MacroInfo *> id_macro_pair;
>   SmallVector<id_macro_pair, 128> MacrosByID;
>   for (Preprocessor::macro_iterator I = PP.macro_begin(), E = PP.macro_end();
>        I != E; ++I) {
>     if (I->first->hasMacroDefinition())
>       MacrosByID.push_back(id_macro_pair(I->first, I->second->getMacroInfo()));
>   }
> -  llvm::array_pod_sort(MacrosByID.begin(), MacrosByID.end(),
> -                       [](const id_macro_pair *LHS, const id_macro_pair *RHS) {
> -    return LHS->first->getName().compare(RHS->first->getName());
> -  });
> +  llvm::array_pod_sort(MacrosByID.begin(), MacrosByID.end(), MacroIDCompare);
> 
>   for (unsigned i = 0, e = MacrosByID.size(); i != e; ++i) {
>     MacroInfo &MI = *MacrosByID[i].second;
> 
> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp?rev=203293&r1=203292&r2=203293&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp Fri Mar  7 15:51:58 2014
> @@ -161,6 +161,11 @@ namespace {
> class ConfigDumper : public Checker< check::EndOfTranslationUnit > {
>   typedef AnalyzerOptions::ConfigTable Table;
> 
> +  static int compareEntry(const Table::MapEntryTy *const *LHS,
> +                          const Table::MapEntryTy *const *RHS) {
> +    return (*LHS)->getKey().compare((*RHS)->getKey());
> +  }
> +
> public:
>   void checkEndOfTranslationUnit(const TranslationUnitDecl *TU,
>                                  AnalysisManager& mgr,
> @@ -171,11 +176,7 @@ public:
>     for (Table::const_iterator I = Config.begin(), E = Config.end(); I != E;
>          ++I)
>       Keys.push_back(&*I);
> -    llvm::array_pod_sort(Keys.begin(), Keys.end(),
> -                         [](const Table::MapEntryTy *const *LHS,
> -                            const Table::MapEntryTy *const *RHS) {
> -      return (*LHS)->getKey().compare((*RHS)->getKey());
> -    });
> +    llvm::array_pod_sort(Keys.begin(), Keys.end(), compareEntry);
> 
>     llvm::errs() << "[config]\n";
>     for (unsigned I = 0, E = Keys.size(); I != E; ++I)
> 
> Modified: cfe/trunk/tools/libclang/CIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=203293&r1=203292&r2=203293&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/CIndex.cpp (original)
> +++ cfe/trunk/tools/libclang/CIndex.cpp Fri Mar  7 15:51:58 2014
> @@ -762,6 +762,12 @@ bool CursorVisitor::VisitDeclaratorDecl(
>   return false;
> }
> 
> +/// \brief Compare two base or member initializers based on their source order.
> +static int CompareCXXCtorInitializers(CXXCtorInitializer *const *X,
> +                                      CXXCtorInitializer *const *Y) {
> +  return (*X)->getSourceOrder() - (*Y)->getSourceOrder();
> +}
> +
> bool CursorVisitor::VisitFunctionDecl(FunctionDecl *ND) {
>   unsigned NumParamList = ND->getNumTemplateParameterLists();
>   for (unsigned i = 0; i < NumParamList; i++) {
> @@ -816,12 +822,9 @@ bool CursorVisitor::VisitFunctionDecl(Fu
>       }
> 
>       // Sort the initializers in source order
> -      llvm::array_pod_sort(
> -          WrittenInits.begin(), WrittenInits.end(),
> -          [](CXXCtorInitializer *const *X, CXXCtorInitializer *const *Y) {
> -            return (*X)->getSourceOrder() - (*Y)->getSourceOrder();
> -          });
> -
> +      llvm::array_pod_sort(WrittenInits.begin(), WrittenInits.end(),
> +                           &CompareCXXCtorInitializers);
> +      
>       // Visit the initializers in source order
>       for (unsigned I = 0, N = WrittenInits.size(); I != N; ++I) {
>         CXXCtorInitializer *Init = WrittenInits[I];
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list