[CodeCompletion] Signature help for aggregate initialization.
authorSam McCall <sam.mccall@gmail.com>
Tue, 28 Dec 2021 02:58:13 +0000 (03:58 +0100)
committerSam McCall <sam.mccall@gmail.com>
Tue, 4 Jan 2022 15:00:22 +0000 (16:00 +0100)
The "parameter list" is the list of fields which should be initialized.
We introduce a new OverloadCandidate kind for this.
It starts to become harder for CC consumers to handle all the cases for
params, so I added some extra APIs on OverloadCandidate to abstract them.

Includes some basic support for designated initializers.
The same aggregate signature is shown, the current arg jumps after the
one you just initialized. This follows C99 semantics for mixed
designated/positional initializers (which clang supports in C++ as an extension)
and is also a useful prompt for C++ as C++ designated initializers must be
in order.

Related bugs:
 - https://github.com/clangd/clangd/issues/965
 - https://github.com/clangd/clangd/issues/306

Differential Revision: https://reviews.llvm.org/D116326

clang-tools-extra/clangd/CodeComplete.cpp
clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
clang/include/clang/Sema/CodeCompleteConsumer.h
clang/lib/Sema/CodeCompleteConsumer.cpp
clang/lib/Sema/SemaCodeComplete.cpp
clang/test/CodeCompletion/ctor-signature.cpp
tl\e [new file with mode: 0644]

index 53d8f0d..50388e0 100644 (file)
@@ -896,10 +896,7 @@ struct ScoredSignature {
 int paramIndexForArg(const CodeCompleteConsumer::OverloadCandidate &Candidate,
                      int Arg) {
   int NumParams = Candidate.getNumParams();
-  if (const auto *F = Candidate.getFunction()) {
-    if (F->isVariadic())
-      ++NumParams;
-  } else if (auto *T = Candidate.getFunctionType()) {
+  if (auto *T = Candidate.getFunctionType()) {
     if (auto *Proto = T->getAs<FunctionProtoType>()) {
       if (Proto->isVariadic())
         ++NumParams;
@@ -996,8 +993,7 @@ public:
                                     const ScoredSignature &R) {
       // Ordering follows:
       // - Less number of parameters is better.
-      // - Function is better than FunctionType which is better than
-      // Function Template.
+      // - Aggregate > Function > FunctionType > FunctionTemplate
       // - High score is better.
       // - Shorter signature is better.
       // - Alphabetically smaller is better.
@@ -1009,18 +1005,22 @@ public:
                R.Quality.NumberOfOptionalParameters;
       if (L.Quality.Kind != R.Quality.Kind) {
         using OC = CodeCompleteConsumer::OverloadCandidate;
-        switch (L.Quality.Kind) {
-        case OC::CK_Function:
-          return true;
-        case OC::CK_FunctionType:
-          return R.Quality.Kind != OC::CK_Function;
-        case OC::CK_FunctionTemplate:
-          return false;
-        case OC::CK_Template:
-          assert(false && "Never see templates and other overloads mixed");
-          return false;
-        }
-        llvm_unreachable("Unknown overload candidate type.");
+        auto KindPriority = [&](OC::CandidateKind K) {
+          switch (K) {
+          case OC::CK_Aggregate:
+            return 1;
+          case OC::CK_Function:
+            return 2;
+          case OC::CK_FunctionType:
+            return 3;
+          case OC::CK_FunctionTemplate:
+            return 4;
+          case OC::CK_Template:
+            return 5;
+          }
+          llvm_unreachable("Unknown overload candidate type.");
+        };
+        return KindPriority(L.Quality.Kind) < KindPriority(R.Quality.Kind);
       }
       if (L.Signature.label.size() != R.Signature.label.size())
         return L.Signature.label.size() < R.Signature.label.size();
@@ -1171,24 +1171,9 @@ public:
            "too many arguments");
 
     for (unsigned I = 0; I < NumCandidates; ++I) {
-      OverloadCandidate Candidate = Candidates[I];
-      NamedDecl *Param = nullptr;
-      if (auto *Func = Candidate.getFunction()) {
-        if (CurrentArg < Func->getNumParams())
-          Param = Func->getParamDecl(CurrentArg);
-      } else if (auto *Template = Candidate.getTemplate()) {
-        if (CurrentArg < Template->getTemplateParameters()->size())
-          Param = Template->getTemplateParameters()->getParam(CurrentArg);
-      }
-
-      if (!Param)
-        continue;
-      auto *Ident = Param->getIdentifier();
-      if (!Ident)
-        continue;
-      auto Name = Ident->getName();
-      if (!Name.empty())
-        ParamNames.insert(Name.str());
+      if (const NamedDecl *ND = Candidates[I].getParamDecl(CurrentArg))
+        if (const auto *II = ND->getIdentifier())
+          ParamNames.emplace(II->getName());
     }
   }
 
index 9d5c576..52dee0f 100644 (file)
@@ -1294,6 +1294,25 @@ TEST(SignatureHelpTest, Constructors) {
   CheckBracedInit("int x(S); int i = x({^});");
 }
 
+TEST(SignatureHelpTest, Aggregates) {
+  std::string Top = R"cpp(
+    struct S {
+      int a, b, c, d;
+    };
+  )cpp";
+  auto AggregateSig = Sig("S{[[int a]], [[int b]], [[int c]], [[int d]]}");
+  EXPECT_THAT(signatures(Top + "S s{^}").signatures,
+              UnorderedElementsAre(AggregateSig, Sig("S{}"),
+                                   Sig("S{[[const S &]]}"),
+                                   Sig("S{[[S &&]]}")));
+  EXPECT_THAT(signatures(Top + "S s{1,^}").signatures,
+              ElementsAre(AggregateSig));
+  EXPECT_EQ(signatures(Top + "S s{1,^}").activeParameter, 1);
+  EXPECT_THAT(signatures(Top + "S s{.c=3,^}").signatures,
+              ElementsAre(AggregateSig));
+  EXPECT_EQ(signatures(Top + "S s{.c=3,^}").activeParameter, 3);
+}
+
 TEST(SignatureHelpTest, OverloadInitListRegression) {
   auto Results = signatures(R"cpp(
     struct A {int x;};
index 70c3470..41c4958 100644 (file)
@@ -1018,6 +1018,9 @@ public:
 
       /// The candidate is a template, template arguments are being completed.
       CK_Template,
+
+      /// The candidate is aggregate initialization of a record type.
+      CK_Aggregate,
     };
 
   private:
@@ -1040,17 +1043,32 @@ public:
       /// The template overload candidate, available when
       /// Kind == CK_Template.
       const TemplateDecl *Template;
+
+      /// The class being aggregate-initialized,
+      /// when Kind == CK_Aggregate
+      const RecordDecl *AggregateType;
     };
 
   public:
     OverloadCandidate(FunctionDecl *Function)
-        : Kind(CK_Function), Function(Function) {}
+        : Kind(CK_Function), Function(Function) {
+      assert(Function != nullptr);
+    }
 
     OverloadCandidate(FunctionTemplateDecl *FunctionTemplateDecl)
-        : Kind(CK_FunctionTemplate), FunctionTemplate(FunctionTemplateDecl) {}
+        : Kind(CK_FunctionTemplate), FunctionTemplate(FunctionTemplateDecl) {
+      assert(FunctionTemplateDecl != nullptr);
+    }
 
     OverloadCandidate(const FunctionType *Type)
-        : Kind(CK_FunctionType), Type(Type) {}
+        : Kind(CK_FunctionType), Type(Type) {
+      assert(Type != nullptr);
+    }
+
+    OverloadCandidate(const RecordDecl *Aggregate)
+        : Kind(CK_Aggregate), AggregateType(Aggregate) {
+      assert(Aggregate != nullptr);
+    }
 
     OverloadCandidate(const TemplateDecl *Template)
         : Kind(CK_Template), Template(Template) {}
@@ -1077,8 +1095,23 @@ public:
       return Template;
     }
 
+    /// Retrieve the aggregate type being initialized.
+    const RecordDecl *getAggregate() const {
+      assert(getKind() == CK_Aggregate);
+      return AggregateType;
+    }
+
+    /// Get the number of parameters in this signature.
     unsigned getNumParams() const;
 
+    /// Get the type of the Nth parameter.
+    /// Returns null if the type is unknown or N is out of range.
+    QualType getParamType(unsigned N) const;
+
+    /// Get the declaration of the Nth parameter.
+    /// Returns null if the decl is unknown or N is out of range.
+    const NamedDecl *getParamDecl(unsigned N) const;
+
     /// Create a new code-completion string that describes the function
     /// signature of this overload candidate.
     CodeCompletionString *
index bb088fd..fefe209 100644 (file)
@@ -508,6 +508,7 @@ CodeCompleteConsumer::OverloadCandidate::getFunctionType() const {
     return Type;
 
   case CK_Template:
+  case CK_Aggregate:
     return nullptr;
   }
 
@@ -517,11 +518,80 @@ CodeCompleteConsumer::OverloadCandidate::getFunctionType() const {
 unsigned CodeCompleteConsumer::OverloadCandidate::getNumParams() const {
   if (Kind == CK_Template)
     return Template->getTemplateParameters()->size();
-  if (const auto *FPT = dyn_cast_or_null<FunctionProtoType>(getFunctionType()))
-    return FPT->getNumParams();
+
+  if (Kind == CK_Aggregate) {
+    unsigned Count =
+        std::distance(AggregateType->field_begin(), AggregateType->field_end());
+    if (const auto *CRD = dyn_cast<CXXRecordDecl>(AggregateType))
+      Count += CRD->getNumBases();
+    return Count;
+  }
+
+  if (const auto *FT = getFunctionType())
+    if (const auto *FPT = dyn_cast<FunctionProtoType>(FT))
+      return FPT->getNumParams();
+
   return 0;
 }
 
+QualType
+CodeCompleteConsumer::OverloadCandidate::getParamType(unsigned N) const {
+  if (Kind == CK_Aggregate) {
+    if (const auto *CRD = dyn_cast<CXXRecordDecl>(AggregateType)) {
+      if (N < CRD->getNumBases())
+        return std::next(CRD->bases_begin(), N)->getType();
+      N -= CRD->getNumBases();
+    }
+    for (const auto *Field : AggregateType->fields())
+      if (N-- == 0)
+        return Field->getType();
+    return QualType();
+  }
+
+  if (Kind == CK_Template) {
+    TemplateParameterList *TPL = getTemplate()->getTemplateParameters();
+    if (N < TPL->size())
+      if (const auto *D = dyn_cast<NonTypeTemplateParmDecl>(TPL->getParam(N)))
+        return D->getType();
+    return QualType();
+  }
+
+  if (const auto *FT = getFunctionType())
+    if (const auto *FPT = dyn_cast<FunctionProtoType>(FT))
+      if (N < FPT->getNumParams())
+        return FPT->getParamType(N);
+  return QualType();
+}
+
+const NamedDecl *
+CodeCompleteConsumer::OverloadCandidate::getParamDecl(unsigned N) const {
+  if (Kind == CK_Aggregate) {
+    if (const auto *CRD = dyn_cast<CXXRecordDecl>(AggregateType)) {
+      if (N < CRD->getNumBases())
+        return std::next(CRD->bases_begin(), N)->getType()->getAsTagDecl();
+      N -= CRD->getNumBases();
+    }
+    for (const auto *Field : AggregateType->fields())
+      if (N-- == 0)
+        return Field;
+    return nullptr;
+  }
+
+  if (Kind == CK_Template) {
+    TemplateParameterList *TPL = getTemplate()->getTemplateParameters();
+    if (N < TPL->size())
+      return TPL->getParam(N);
+    return nullptr;
+  }
+
+  // Note that if we only have a FunctionProtoType, we don't have param decls.
+  if (const auto *FD = getFunction()) {
+    if (N < FD->param_size())
+      return FD->getParamDecl(N);
+  }
+  return nullptr;
+}
+
 //===----------------------------------------------------------------------===//
 // Code completion consumer implementation
 //===----------------------------------------------------------------------===//
index e2bf5ed..e089f85 100644 (file)
@@ -2817,14 +2817,18 @@ formatBlockPlaceholder(const PrintingPolicy &Policy, const NamedDecl *BlockDecl,
                        Optional<ArrayRef<QualType>> ObjCSubsts = None);
 
 static std::string
-FormatFunctionParameter(const PrintingPolicy &Policy, const ParmVarDecl *Param,
-                        bool SuppressName = false, bool SuppressBlock = false,
+FormatFunctionParameter(const PrintingPolicy &Policy,
+                        const DeclaratorDecl *Param, bool SuppressName = false,
+                        bool SuppressBlock = false,
                         Optional<ArrayRef<QualType>> ObjCSubsts = None) {
   // Params are unavailable in FunctionTypeLoc if the FunctionType is invalid.
   // It would be better to pass in the param Type, which is usually available.
   // But this case is rare, so just pretend we fell back to int as elsewhere.
   if (!Param)
     return "int";
+  Decl::ObjCDeclQualifier ObjCQual = Decl::OBJC_TQ_None;
+  if (const auto *PVD = dyn_cast<ParmVarDecl>(Param))
+    ObjCQual = PVD->getObjCDeclQualifier();
   bool ObjCMethodParam = isa<ObjCMethodDecl>(Param->getDeclContext());
   if (Param->getType()->isDependentType() ||
       !Param->getType()->isBlockPointerType()) {
@@ -2840,8 +2844,7 @@ FormatFunctionParameter(const PrintingPolicy &Policy, const ParmVarDecl *Param,
       Type = Type.substObjCTypeArgs(Param->getASTContext(), *ObjCSubsts,
                                     ObjCSubstitutionContext::Parameter);
     if (ObjCMethodParam) {
-      Result =
-          "(" + formatObjCParamQualifiers(Param->getObjCDeclQualifier(), Type);
+      Result = "(" + formatObjCParamQualifiers(ObjCQual, Type);
       Result += Type.getAsString(Policy) + ")";
       if (Param->getIdentifier() && !SuppressName)
         Result += Param->getIdentifier()->getName();
@@ -2878,8 +2881,7 @@ FormatFunctionParameter(const PrintingPolicy &Policy, const ParmVarDecl *Param,
 
     if (ObjCMethodParam) {
       Result = Type.getAsString(Policy);
-      std::string Quals =
-          formatObjCParamQualifiers(Param->getObjCDeclQualifier(), Type);
+      std::string Quals = formatObjCParamQualifiers(ObjCQual, Type);
       if (!Quals.empty())
         Result = "(" + Quals + " " + Result + ")";
       if (Result.back() != ')')
@@ -3689,6 +3691,31 @@ const RawComment *clang::getParameterComment(
   return nullptr;
 }
 
+static void AddOverloadAggregateChunks(const RecordDecl *RD,
+                                       const PrintingPolicy &Policy,
+                                       CodeCompletionBuilder &Result,
+                                       unsigned CurrentArg) {
+  unsigned ChunkIndex = 0;
+  auto AddChunk = [&](llvm::StringRef Placeholder) {
+    if (ChunkIndex > 0)
+      Result.AddChunk(CodeCompletionString::CK_Comma);
+    const char *Copy = Result.getAllocator().CopyString(Placeholder);
+    if (ChunkIndex == CurrentArg)
+      Result.AddCurrentParameterChunk(Copy);
+    else
+      Result.AddPlaceholderChunk(Copy);
+    ++ChunkIndex;
+  };
+  // Aggregate initialization has all bases followed by all fields.
+  // (Bases are not legal in C++11 but in that case we never get here).
+  if (auto *CRD = llvm::dyn_cast<CXXRecordDecl>(RD)) {
+    for (const auto &Base : CRD->bases())
+      AddChunk(Base.getType().getAsString(Policy));
+  }
+  for (const auto &Field : RD->fields())
+    AddChunk(FormatFunctionParameter(Policy, Field));
+}
+
 /// Add function overload parameter chunks to the given code completion
 /// string.
 static void AddOverloadParameterChunks(ASTContext &Context,
@@ -3698,6 +3725,11 @@ static void AddOverloadParameterChunks(ASTContext &Context,
                                        CodeCompletionBuilder &Result,
                                        unsigned CurrentArg, unsigned Start = 0,
                                        bool InOptional = false) {
+  if (!Function && !Prototype) {
+    Result.AddChunk(CodeCompletionString::CK_CurrentParameter, "...");
+    return;
+  }
+
   bool FirstParameter = true;
   unsigned NumParams =
       Function ? Function->getNumParams() : Prototype->getNumParams();
@@ -3851,22 +3883,13 @@ CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(
 
   FunctionDecl *FDecl = getFunction();
   const FunctionProtoType *Proto =
-      dyn_cast<FunctionProtoType>(getFunctionType());
-  if (!FDecl && !Proto) {
-    // Function without a prototype. Just give the return type and a
-    // highlighted ellipsis.
-    const FunctionType *FT = getFunctionType();
-    Result.AddResultTypeChunk(Result.getAllocator().CopyString(
-        FT->getReturnType().getAsString(Policy)));
-    Result.AddChunk(Braced ? CodeCompletionString::CK_LeftBrace
-                           : CodeCompletionString::CK_LeftParen);
-    Result.AddChunk(CodeCompletionString::CK_CurrentParameter, "...");
-    Result.AddChunk(Braced ? CodeCompletionString::CK_RightBrace
-                           : CodeCompletionString::CK_RightParen);
-    return Result.TakeString();
-  }
+      dyn_cast_or_null<FunctionProtoType>(getFunctionType());
 
-  if (FDecl) {
+  // First, the name/type of the callee.
+  if (getKind() == CK_Aggregate) {
+    Result.AddTextChunk(
+        Result.getAllocator().CopyString(getAggregate()->getName()));
+  } else if (FDecl) {
     if (IncludeBriefComments) {
       if (auto RC = getParameterComment(S.getASTContext(), *this, CurrentArg))
         Result.addBriefComment(RC->getBriefText(S.getASTContext()));
@@ -3878,14 +3901,19 @@ CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(
     FDecl->getDeclName().print(OS, Policy);
     Result.AddTextChunk(Result.getAllocator().CopyString(OS.str()));
   } else {
+    // Function without a declaration. Just give the return type.
     Result.AddResultTypeChunk(Result.getAllocator().CopyString(
-        Proto->getReturnType().getAsString(Policy)));
+        getFunctionType()->getReturnType().getAsString(Policy)));
   }
 
+  // Next, the brackets and parameters.
   Result.AddChunk(Braced ? CodeCompletionString::CK_LeftBrace
                          : CodeCompletionString::CK_LeftParen);
-  AddOverloadParameterChunks(S.getASTContext(), Policy, FDecl, Proto, Result,
-                             CurrentArg);
+  if (getKind() == CK_Aggregate)
+    AddOverloadAggregateChunks(getAggregate(), Policy, Result, CurrentArg);
+  else
+    AddOverloadParameterChunks(S.getASTContext(), Policy, FDecl, Proto, Result,
+                               CurrentArg);
   Result.AddChunk(Braced ? CodeCompletionString::CK_RightBrace
                          : CodeCompletionString::CK_RightParen);
 
@@ -5926,18 +5954,18 @@ static QualType getParamType(Sema &SemaRef,
   // overload candidates.
   QualType ParamType;
   for (auto &Candidate : Candidates) {
-    // FIXME: handle non-type-template-parameters by merging with D116326
-    if (const auto *FType = Candidate.getFunctionType())
-      if (const auto *Proto = dyn_cast<FunctionProtoType>(FType))
-        if (N < Proto->getNumParams()) {
-          if (ParamType.isNull())
-            ParamType = Proto->getParamType(N);
-          else if (!SemaRef.Context.hasSameUnqualifiedType(
-                       ParamType.getNonReferenceType(),
-                       Proto->getParamType(N).getNonReferenceType()))
-            // Otherwise return a default-constructed QualType.
-            return QualType();
-        }
+    QualType CandidateParamType = Candidate.getParamType(N);
+    if (CandidateParamType.isNull())
+      continue;
+    if (ParamType.isNull()) {
+      ParamType = CandidateParamType;
+      continue;
+    }
+    if (!SemaRef.Context.hasSameUnqualifiedType(
+            ParamType.getNonReferenceType(),
+            CandidateParamType.getNonReferenceType()))
+      // Two conflicting types, give up.
+      return QualType();
   }
 
   return ParamType;
@@ -6058,6 +6086,73 @@ QualType Sema::ProduceCallSignatureHelp(Expr *Fn, ArrayRef<Expr *> Args,
   return !CandidateSet.empty() ? ParamType : QualType();
 }
 
+// Determine which param to continue aggregate initialization from after
+// a designated initializer.
+//
+// Given struct S { int a,b,c,d,e; }:
+//   after `S{.b=1,`       we want to suggest c to continue
+//   after `S{.b=1, 2,`    we continue with d (this is legal C and ext in C++)
+//   after `S{.b=1, .a=2,` we continue with b (this is legal C and ext in C++)
+//
+// Possible outcomes:
+//   - we saw a designator for a field, and continue from the returned index.
+//     Only aggregate initialization is allowed.
+//   - we saw a designator, but it was complex or we couldn't find the field.
+//     Only aggregate initialization is possible, but we can't assist with it.
+//     Returns an out-of-range index.
+//   - we saw no designators, just positional arguments.
+//     Returns None.
+static llvm::Optional<unsigned>
+getNextAggregateIndexAfterDesignatedInit(const ResultCandidate &Aggregate,
+                                         ArrayRef<Expr *> Args) {
+  static constexpr unsigned Invalid = std::numeric_limits<unsigned>::max();
+  assert(Aggregate.getKind() == ResultCandidate::CK_Aggregate);
+
+  // Look for designated initializers.
+  // They're in their syntactic form, not yet resolved to fields.
+  IdentifierInfo *DesignatedFieldName = nullptr;
+  unsigned ArgsAfterDesignator = 0;
+  for (const Expr *Arg : Args) {
+    if (const auto *DIE = dyn_cast<DesignatedInitExpr>(Arg)) {
+      if (DIE->size() == 1 && DIE->getDesignator(0)->isFieldDesignator()) {
+        DesignatedFieldName = DIE->getDesignator(0)->getFieldName();
+        ArgsAfterDesignator = 0;
+      } else {
+        return Invalid; // Complicated designator.
+      }
+    } else if (isa<DesignatedInitUpdateExpr>(Arg)) {
+      return Invalid; // Unsupported.
+    } else {
+      ++ArgsAfterDesignator;
+    }
+  }
+  if (!DesignatedFieldName)
+    return llvm::None;
+
+  // Find the index within the class's fields.
+  // (Probing getParamDecl() directly would be quadratic in number of fields).
+  unsigned DesignatedIndex = 0;
+  const FieldDecl *DesignatedField = nullptr;
+  for (const auto *Field : Aggregate.getAggregate()->fields()) {
+    if (Field->getIdentifier() == DesignatedFieldName) {
+      DesignatedField = Field;
+      break;
+    }
+    ++DesignatedIndex;
+  }
+  if (!DesignatedField)
+    return Invalid; // Designator referred to a missing field, give up.
+
+  // Find the index within the aggregate (which may have leading bases).
+  unsigned AggregateSize = Aggregate.getNumParams();
+  while (DesignatedIndex < AggregateSize &&
+         Aggregate.getParamDecl(DesignatedIndex) != DesignatedField)
+    ++DesignatedIndex;
+
+  // Continue from the index after the last named field.
+  return DesignatedIndex + ArgsAfterDesignator + 1;
+}
+
 QualType Sema::ProduceConstructorSignatureHelp(QualType Type,
                                                SourceLocation Loc,
                                                ArrayRef<Expr *> Args,
@@ -6065,48 +6160,72 @@ QualType Sema::ProduceConstructorSignatureHelp(QualType Type,
                                                bool Braced) {
   if (!CodeCompleter)
     return QualType();
+  SmallVector<ResultCandidate, 8> Results;
 
   // A complete type is needed to lookup for constructors.
-  CXXRecordDecl *RD =
-      isCompleteType(Loc, Type) ? Type->getAsCXXRecordDecl() : nullptr;
+  RecordDecl *RD =
+      isCompleteType(Loc, Type) ? Type->getAsRecordDecl() : nullptr;
   if (!RD)
     return Type;
-  // FIXME: we don't support signature help for aggregate initialization, so
-  //        don't offer a confusing partial list (e.g. the copy constructor).
-  if (Braced && RD->isAggregate())
-    return Type;
+  CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD);
+
+  // Consider aggregate initialization.
+  // We don't check that types so far are correct.
+  // We also don't handle C99/C++17 brace-elision, we assume init-list elements
+  // are 1:1 with fields.
+  // FIXME: it would be nice to support "unwrapping" aggregates that contain
+  // a single subaggregate, like std::array<T, N> -> T __elements[N].
+  if (Braced && !RD->isUnion() &&
+      (!LangOpts.CPlusPlus || (CRD && CRD->isAggregate()))) {
+    ResultCandidate AggregateSig(RD);
+    unsigned AggregateSize = AggregateSig.getNumParams();
+
+    if (auto NextIndex =
+            getNextAggregateIndexAfterDesignatedInit(AggregateSig, Args)) {
+      // A designator was used, only aggregate init is possible.
+      if (*NextIndex >= AggregateSize)
+        return Type;
+      Results.push_back(AggregateSig);
+      return ProduceSignatureHelp(*this, Results, *NextIndex, OpenParLoc,
+                                  Braced);
+    }
+
+    // Describe aggregate initialization, but also constructors below.
+    if (Args.size() < AggregateSize)
+      Results.push_back(AggregateSig);
+  }
 
   // FIXME: Provide support for member initializers.
   // FIXME: Provide support for variadic template constructors.
 
-  OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal);
-
-  for (NamedDecl *C : LookupConstructors(RD)) {
-    if (auto *FD = dyn_cast<FunctionDecl>(C)) {
-      // FIXME: we can't yet provide correct signature help for initializer
-      //        list constructors, so skip them entirely.
-      if (Braced && LangOpts.CPlusPlus && isInitListConstructor(FD))
-        continue;
-      AddOverloadCandidate(FD, DeclAccessPair::make(FD, C->getAccess()), Args,
-                           CandidateSet,
-                           /*SuppressUserConversions=*/false,
-                           /*PartialOverloading=*/true,
-                           /*AllowExplicit*/ true);
-    } else if (auto *FTD = dyn_cast<FunctionTemplateDecl>(C)) {
-      if (Braced && LangOpts.CPlusPlus &&
-          isInitListConstructor(FTD->getTemplatedDecl()))
-        continue;
+  if (CRD) {
+    OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal);
+    for (NamedDecl *C : LookupConstructors(CRD)) {
+      if (auto *FD = dyn_cast<FunctionDecl>(C)) {
+        // FIXME: we can't yet provide correct signature help for initializer
+        //        list constructors, so skip them entirely.
+        if (Braced && LangOpts.CPlusPlus && isInitListConstructor(FD))
+          continue;
+        AddOverloadCandidate(FD, DeclAccessPair::make(FD, C->getAccess()), Args,
+                             CandidateSet,
+                             /*SuppressUserConversions=*/false,
+                             /*PartialOverloading=*/true,
+                             /*AllowExplicit*/ true);
+      } else if (auto *FTD = dyn_cast<FunctionTemplateDecl>(C)) {
+        if (Braced && LangOpts.CPlusPlus &&
+            isInitListConstructor(FTD->getTemplatedDecl()))
+          continue;
 
-      AddTemplateOverloadCandidate(
-          FTD, DeclAccessPair::make(FTD, C->getAccess()),
-          /*ExplicitTemplateArgs=*/nullptr, Args, CandidateSet,
-          /*SuppressUserConversions=*/false,
-          /*PartialOverloading=*/true);
+        AddTemplateOverloadCandidate(
+            FTD, DeclAccessPair::make(FTD, C->getAccess()),
+            /*ExplicitTemplateArgs=*/nullptr, Args, CandidateSet,
+            /*SuppressUserConversions=*/false,
+            /*PartialOverloading=*/true);
+      }
     }
+    mergeCandidatesWithResults(*this, Results, CandidateSet, Loc, Args.size());
   }
 
-  SmallVector<ResultCandidate, 8> Results;
-  mergeCandidatesWithResults(*this, Results, CandidateSet, Loc, Args.size());
   return ProduceSignatureHelp(*this, Results, Args.size(), OpenParLoc, Braced);
 }
 
index b02c881..8f0cfac 100644 (file)
@@ -42,13 +42,29 @@ int b3 = consumeBar({});
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:41:22 %s | FileCheck -check-prefix=CHECK-BRACED %s
 
 struct Aggregate {
-  // FIXME: no support for aggregates yet.
-  // CHECK-AGGREGATE-NOT: OVERLOAD: Aggregate{<#const Aggregate &#>}
-  // CHECK-AGGREGATE-NOT: OVERLOAD: {{.*}}first
   int first;
   int second;
+  int third;
 };
 
-Aggregate a{};
-// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:52:13 %s | FileCheck -check-prefix=CHECK-AGGREGATE %s
+Aggregate a{1, 2, 3};
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:50:13 %s | FileCheck -check-prefix=CHECK-AGGREGATE-1 %s
+// CHECK-AGGREGATE-1: OVERLOAD: Aggregate{<#int first#>, int second, int third}
+// CHECK-AGGREGATE-1: OVERLOAD: Aggregate{<#const Aggregate &#>}
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:50:16 %s | FileCheck -check-prefix=CHECK-AGGREGATE-2 %s
+// CHECK-AGGREGATE-2: OVERLOAD: Aggregate{int first, <#int second#>, int third}
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:50:18 %s | FileCheck -check-prefix=CHECK-AGGREGATE-3 %s
+// CHECK-AGGREGATE-3: OVERLOAD: Aggregate{int first, int second, <#int third#>}
 
+Aggregate d{.second=1, .first=2, 3, 4, };
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:59:13 %s | FileCheck -check-prefix=CHECK-DESIG-1 %s
+// CHECK-DESIG-1: OVERLOAD: Aggregate{<#int first#>, int second, int third}
+// CHECK-DESIG-1: OVERLOAD: Aggregate{<#const Aggregate &#>}
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:59:24 %s | FileCheck -check-prefix=CHECK-DESIG-2 %s
+// CHECK-DESIG-2: OVERLOAD: Aggregate{int first, int second, <#int third#>}
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:59:34 %s | FileCheck -check-prefix=CHECK-DESIG-3 %s
+// CHECK-DESIG-3: OVERLOAD: Aggregate{int first, <#int second#>, int third}
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:59:37 %s | FileCheck -check-prefix=CHECK-DESIG-4 %s
+// CHECK-DESIG-4: OVERLOAD: Aggregate{int first, int second, <#int third#>}
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:59:38 %s | FileCheck -check-prefix=CHECK-DESIG-5 %s --allow-empty
+// CHECK-DESIG-5-NOT: OVERLOAD
diff --git a/tl\e b/tl\e
new file mode 100644 (file)
index 0000000..1a124a4
--- /dev/null
+++ b/tl\e
@@ -0,0 +1,1381 @@
+\e[33m2a92efd0a239\e[m\e[33m (\e[m\e[1;36mHEAD -> \e[m\e[1;32mmain\e[m\e[33m, \e[m\e[1;31morigin/main\e[m\e[33m)\e[m HEAD@{0}: rebase (finish): returning to refs/heads/main
+\e[33m2a92efd0a239\e[m\e[33m (\e[m\e[1;36mHEAD -> \e[m\e[1;32mmain\e[m\e[33m, \e[m\e[1;31morigin/main\e[m\e[33m)\e[m HEAD@{1}: rebase (pick): [CodeComplete] drop unused Scope param. NFC
+\e[33m1379eb577607\e[m HEAD@{2}: rebase (start): checkout origin/main
+\e[33m1e3d96c67ff9\e[m HEAD@{3}: commit: [CodeComplete] drop unused Scope param. NFC
+\e[33m6231ef262415\e[m HEAD@{4}: rebase (finish): returning to refs/heads/main
+\e[33m6231ef262415\e[m HEAD@{5}: rebase (start): checkout origin/main
+\e[33mf1f5a85af8be\e[m HEAD@{6}: checkout: moving from aggregates to main
+\e[33mc8b1ec7561fe\e[m\e[33m (\e[m\e[1;32maggregates\e[m\e[33m)\e[m HEAD@{7}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33mfee43399f0af\e[m HEAD@{8}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33mdaf114e5c347\e[m HEAD@{9}: rebase (continue) (finish): returning to refs/heads/aggregates
+\e[33mdaf114e5c347\e[m HEAD@{10}: rebase (continue): [CodeCompletion] Signature help for aggregate initialization.
+\e[33mf2b3e25f860e\e[m\e[33m (\e[m\e[1;32mconfigcompiler\e[m\e[33m)\e[m HEAD@{11}: rebase (start): checkout origin/main
+\e[33m4f17932fb479\e[m HEAD@{12}: checkout: moving from configcompiler to aggregates
+\e[33mf2b3e25f860e\e[m\e[33m (\e[m\e[1;32mconfigcompiler\e[m\e[33m)\e[m HEAD@{13}: rebase (finish): returning to refs/heads/configcompiler
+\e[33mf2b3e25f860e\e[m\e[33m (\e[m\e[1;32mconfigcompiler\e[m\e[33m)\e[m HEAD@{14}: rebase (pick): [clangd] Add CompileFlags.Compiler option to override argv0
+\e[33mf4ef79306cee\e[m HEAD@{15}: rebase (start): checkout origin/main
+\e[33m6443bd3db307\e[m HEAD@{16}: commit (amend): [clangd] Add CompileFlags.Compiler option to override argv0
+\e[33m0fa6fc0238fe\e[m HEAD@{17}: reset: moving to HEAD
+\e[33m0fa6fc0238fe\e[m HEAD@{18}: checkout: moving from main to configcompiler
+\e[33mf1f5a85af8be\e[m HEAD@{19}: rebase (finish): returning to refs/heads/main
+\e[33mf1f5a85af8be\e[m HEAD@{20}: rebase (start): checkout origin/main
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{21}: checkout: moving from bracehelp to main
+\e[33ma61f34ea2502\e[m\e[33m (\e[m\e[1;32mbracehelp\e[m\e[33m)\e[m HEAD@{22}: commit: [clangd] Fix windows build after 478863ef58c7f7314e06
+\e[33m92417eaf3329\e[m HEAD@{23}: rebase (finish): returning to refs/heads/bracehelp
+\e[33m92417eaf3329\e[m HEAD@{24}: rebase (pick): [CodeCompletion] Signature help for braced constructor calls
+\e[33ma390c9905d4d\e[m HEAD@{25}: rebase (start): checkout origin/main
+\e[33m8da663369977\e[m HEAD@{26}: commit (amend): [CodeCompletion] Signature help for braced constructor calls
+\e[33m9ee52e712414\e[m HEAD@{27}: rebase (continue) (finish): returning to refs/heads/bracehelp
+\e[33m9ee52e712414\e[m HEAD@{28}: rebase (continue): [CodeCompletion] Signature help for braced constructor calls
+\e[33m364eb371012b\e[m HEAD@{29}: rebase (start): checkout origin/main
+\e[33mb245d1eaec2d\e[m HEAD@{30}: checkout: moving from iwyustdlib to bracehelp
+\e[33m478863ef58c7\e[m\e[33m (\e[m\e[1;32miwyustdlib\e[m\e[33m)\e[m HEAD@{31}: commit (amend): [clangd] Basic IncludeCleaner support for c/c++ standard library
+\e[33mee8a314f09c0\e[m HEAD@{32}: rebase (finish): returning to refs/heads/iwyustdlib
+\e[33mee8a314f09c0\e[m HEAD@{33}: rebase (pick): [clangd] Basic IncludeCleaner support for c/c++ standard library
+\e[33mb9ed95afc4b1\e[m HEAD@{34}: rebase (start): checkout origin/main
+\e[33mf038610fb5f3\e[m HEAD@{35}: checkout: moving from insertion_point to iwyustdlib
+\e[33mfe68088d44f7\e[m\e[33m (\e[m\e[1;32minsertion_point\e[m\e[33m)\e[m HEAD@{36}: rebase (finish): returning to refs/heads/insertion_point
+\e[33mfe68088d44f7\e[m\e[33m (\e[m\e[1;32minsertion_point\e[m\e[33m)\e[m HEAD@{37}: rebase (pick): [clangd] Helper for determining member insertion point.
+\e[33m9e6f88b31a7f\e[m\e[33m (\e[m\e[1;32mtidydiags\e[m\e[33m)\e[m HEAD@{38}: rebase (start): checkout origin/main
+\e[33maacd98d5b867\e[m HEAD@{39}: checkout: moving from tidydiags to insertion_point
+\e[33m9e6f88b31a7f\e[m\e[33m (\e[m\e[1;32mtidydiags\e[m\e[33m)\e[m HEAD@{40}: commit (amend): [clangd] Respect .clang-tidy ExtraArgs (-Wfoo only) when producing diagnostics
+\e[33me9211c3dd6ba\e[m HEAD@{41}: rebase (finish): returning to refs/heads/tidydiags
+\e[33me9211c3dd6ba\e[m HEAD@{42}: rebase (pick): [clangd] Respect .clang-tidy ExtraArgs (-Wfoo only) when producing diagnostics
+\e[33m7505aeefc4e6\e[m HEAD@{43}: rebase (start): checkout origin/main
+\e[33m53abaad295f4\e[m HEAD@{44}: checkout: moving from aggregates to tidydiags
+\e[33m4f17932fb479\e[m HEAD@{45}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33m9cf82ca7e4ee\e[m HEAD@{46}: checkout: moving from tmplargs to aggregates
+\e[33mcd45e8c7bc16\e[m\e[33m (\e[m\e[1;32mtmplargs\e[m\e[33m)\e[m HEAD@{47}: rebase (finish): returning to refs/heads/tmplargs
+\e[33mcd45e8c7bc16\e[m\e[33m (\e[m\e[1;32mtmplargs\e[m\e[33m)\e[m HEAD@{48}: rebase (pick): [CodeCompletion] Signature help for template argument lists
+\e[33m3a33c0b1ce0d\e[m HEAD@{49}: rebase (start): checkout origin/main
+\e[33m36da2251bd60\e[m HEAD@{50}: commit (amend): [CodeCompletion] Signature help for template argument lists
+\e[33mef7f8bce7503\e[m HEAD@{51}: checkout: moving from arcpatch-D116218 to tmplargs
+\e[33mf2b2aae6843b\e[m\e[33m (\e[m\e[1;32marcpatch-D116218\e[m\e[33m)\e[m HEAD@{52}: commit (amend): [clangd] Fix selection on multi-dimensional array.
+\e[33m50f8215cc9be\e[m HEAD@{53}: commit (amend): [clangd] Fix selection on multi-dimensional array. (alternate version)
+\e[33m85244a21fd16\e[m HEAD@{54}: commit (amend): [clangd] Fix selection on multi-dimensional array. (alternate version)
+\e[33m169e8e0af680\e[m HEAD@{55}: rebase (finish): returning to refs/heads/arcpatch-D116218
+\e[33m169e8e0af680\e[m HEAD@{56}: rebase (pick): [clangd] Fix selection on multi-dimensional array.
+\e[33mca271f4ef5a2\e[m HEAD@{57}: rebase (start): checkout origin/main
+\e[33m70d0857a4dea\e[m HEAD@{58}: commit: [clangd] Fix selection on multi-dimensional array.
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{59}: checkout: moving from main to arcpatch-D116218
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{60}: checkout: moving from tmplargs to main
+\e[33mef7f8bce7503\e[m HEAD@{61}: commit (amend): [CodeCompletion] Signature help for template argument lists
+\e[33ma7b31d694812\e[m HEAD@{62}: checkout: moving from insertion_point to tmplargs
+\e[33maacd98d5b867\e[m HEAD@{63}: commit (amend): [clangd] Helper for determining member insertion point.
+\e[33mac972fe4ff15\e[m HEAD@{64}: checkout: moving from main to insertion_point
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{65}: reset: moving to HEAD
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{66}: checkout: moving from constructor to main
+\e[33m41fbc109a1ae\e[m\e[33m (\e[m\e[1;32mconstructor\e[m\e[33m)\e[m HEAD@{67}: commit (amend): [clangd] Add code action to generate a constructor for a C++ class
+\e[33m8e709f570606\e[m HEAD@{68}: commit (amend): [clangd] Add code action to generate a constructor for a C++ class
+\e[33m456dc7755f32\e[m HEAD@{69}: commit: [clangd] Add code action to generate a constructor for a C++ class
+\e[33mac972fe4ff15\e[m HEAD@{70}: checkout: moving from insertion_point to constructor
+\e[33mac972fe4ff15\e[m HEAD@{71}: checkout: moving from constructor to insertion_point
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{72}: reset: moving to HEAD
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{73}: checkout: moving from constructor to constructor
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{74}: reset: moving to HEAD~1
+\e[33maa6435e963ca\e[m HEAD@{75}: checkout: moving from insertion_point to constructor
+\e[33mac972fe4ff15\e[m HEAD@{76}: checkout: moving from constructor to insertion_point
+\e[33maa6435e963ca\e[m HEAD@{77}: commit (amend): [clangd] Helper for determining member insertion point.
+\e[33m45d6b0cd4780\e[m HEAD@{78}: commit (amend): [clangd] Helper for determining member insertion point.
+\e[33mac972fe4ff15\e[m HEAD@{79}: checkout: moving from insertion_point to constructor
+\e[33mac972fe4ff15\e[m HEAD@{80}: checkout: moving from specialmember to insertion_point
+\e[33m60a028a904d5\e[m\e[33m (\e[m\e[1;32mspecialmember\e[m\e[33m)\e[m HEAD@{81}: commit (amend): [clangd] Code action to declare missing move/copy constructor/assignment
+\e[33m939996aed14e\e[m HEAD@{82}: checkout: moving from 939996aed14ec84df8cce3f4a5ec4988c4a1f564 to specialmember
+\e[33m939996aed14e\e[m HEAD@{83}: rebase (pick): [clangd] Code action to declare missing move/copy constructor/assignment
+\e[33mac972fe4ff15\e[m HEAD@{84}: rebase (start): checkout insertion_point
+\e[33mbbeef89ae1af\e[m HEAD@{85}: checkout: moving from specialmember to bbeef89ae1af
+\e[33mac972fe4ff15\e[m HEAD@{86}: rebase (finish): returning to refs/heads/specialmember
+\e[33mac972fe4ff15\e[m HEAD@{87}: rebase (start): checkout insertion_point
+\e[33mbbeef89ae1af\e[m HEAD@{88}: checkout: moving from insertion_point to specialmember
+\e[33mac972fe4ff15\e[m HEAD@{89}: commit (amend): [clangd] Helper for determining member insertion point.
+\e[33m0eac12f86ab3\e[m HEAD@{90}: commit (amend): [clangd] Helper for determining member insertion point.
+\e[33m156bab8c3ab7\e[m HEAD@{91}: commit (amend): [clangd] Helper for determining member insertion point.
+\e[33mda546cc68656\e[m HEAD@{92}: commit (amend): [clangd] Helper for determining member insertion point.
+\e[33m407f5558b48c\e[m HEAD@{93}: commit: [clangd] Helper for determining member insertion point.
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{94}: checkout: moving from main to insertion_point
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{95}: checkout: moving from specialmember to main
+\e[33mbbeef89ae1af\e[m HEAD@{96}: commit (amend): [clangd] Code action to declare missing move/copy constructor/assignment
+\e[33ma66453e487e3\e[m HEAD@{97}: reset: moving to HEAD
+\e[33ma66453e487e3\e[m HEAD@{98}: commit (amend): [clangd] Code action to declare missing move/copy constructor/assignment
+\e[33m31c647f871a8\e[m HEAD@{99}: commit (amend): [clangd] Code action to declare missing move/copy constructor/assignment
+\e[33m500372f1ac6d\e[m HEAD@{100}: reset: moving to HEAD
+\e[33m500372f1ac6d\e[m HEAD@{101}: commit (amend): [clangd] Code action to declare missing move/copy constructor/assignment
+\e[33m174dac9746f1\e[m HEAD@{102}: commit (amend): [clangd] Code action to declare missing move/copy constructor/assignment
+\e[33m34bba952dadc\e[m HEAD@{103}: commit (amend): [clangd] Code action to declare missing move/copy constructor/assignment
+\e[33m8b2288785c88\e[m HEAD@{104}: commit: [clangd] Code action to declare missing move/copy constructor/assignment
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{105}: checkout: moving from main to specialmember
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{106}: checkout: moving from typeDefinition to main
+\e[33m6fbb2e3eca26\e[m\e[33m (\e[m\e[1;32mtypeDefinition\e[m\e[33m)\e[m HEAD@{107}: commit (amend): [clangd] Implement textDocument/typeDefinition
+\e[33m1ea84876711e\e[m HEAD@{108}: commit (amend): [clangd] Implement textDocument/typeDefinition
+\e[33m2bf2e73c73d9\e[m HEAD@{109}: commit (amend): [clangd] Implement textDocument/typeDefinition
+\e[33md15e5a597103\e[m HEAD@{110}: commit (amend): [clangd] Implement textDocument/typeDefinition
+\e[33m494458626828\e[m HEAD@{111}: commit: [clangd] Implement textDocument/typeDefinition
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{112}: checkout: moving from main to typeDefinition
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{113}: rebase (finish): returning to refs/heads/main
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{114}: rebase (start): checkout origin/main
+\e[33m72ea6fbc150a\e[m HEAD@{115}: checkout: moving from arraytype to main
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{116}: rebase (finish): returning to refs/heads/arraytype
+\e[33m09f8315bba39\e[m\e[33m (\e[m\e[1;32marraytype\e[m\e[33m)\e[m HEAD@{117}: rebase (pick): [Sema] a[x] has type T when a has type T* or T[], even when T is dependent
+\e[33med67d5a03aaf\e[m HEAD@{118}: rebase (start): checkout origin/main
+\e[33m5c3e13fb9825\e[m HEAD@{119}: commit (amend): [Sema] a[x] has type T when a has type T* or T[], even when T is dependent
+\e[33m991036e41b3b\e[m HEAD@{120}: commit (amend): [Sema] a[x] has type T when a has type T* or T[], even when T is dependent
+\e[33m47ffbac82a3f\e[m HEAD@{121}: commit (amend): [Sema] a[x] has type T when a has type T* or T[], even when T is dependent
+\e[33m9923e86a3a96\e[m HEAD@{122}: rebase (continue) (finish): returning to refs/heads/arraytype
+\e[33m9923e86a3a96\e[m HEAD@{123}: rebase (continue): [Sema] a[x] has type T when a has type T* or T[], even when T is dependent
+\e[33m15787ccd4574\e[m HEAD@{124}: rebase (start): checkout origin/main
+\e[33m1dc8f4774d34\e[m HEAD@{125}: rebase (abort): updating HEAD
+\e[33m0651768d7a19\e[m HEAD@{126}: rebase (pick): updated suggesting/coloring of call & return args & implicit operands.
+\e[33mf86d65195716\e[m HEAD@{127}: rebase (pick): updated suggesting/coloring of call & return args & implicit operands
+\e[33m3002813063a8\e[m HEAD@{128}: rebase (pick): --changed Sugesting colors for method calls/return values etc.
+\e[33m7bdf5ba01bb0\e[m HEAD@{129}: rebase (pick): fixed a coalscing bug
+\e[33m7524a1746083\e[m HEAD@{130}: rebase (pick): Add library
+\e[33mba28b47cb919\e[m HEAD@{131}: rebase (pick): Be const correct
+\e[33m1aa4098bafea\e[m HEAD@{132}: rebase (pick): Minor code cleanups
+\e[33m629281c4710d\e[m HEAD@{133}: rebase (pick): Add cast_or_null & dyn_cast_or_null
+\e[33m24c3a0a84fda\e[m HEAD@{134}: rebase (pick): Implement initializers for structs and pointers
+\e[33m2f93ba463315\e[m HEAD@{135}: rebase (pick): Rename ConstPoolPointerReference to ConstPoolPointerRef - My fingers get tired typing that much
+\e[33me58844e57ecb\e[m HEAD@{136}: rebase (pick): Improve error messages on assertion failure.
+\e[33m73eab57ce304\e[m HEAD@{137}: rebase (pick): * getExitNode() doesn't exist in method anymore
+\e[33m171cd5f1d612\e[m HEAD@{138}: rebase (pick): Added Instrumentation subdirectory.
+\e[33m2423a863e15b\e[m HEAD@{139}: rebase (pick): Implement global variables. Struct and Pointer initializers are not implemented yet though
+\e[33m3af979135686\e[m HEAD@{140}: rebase (pick): Implement linking of global variable constant references
+\e[33mc1129719df3c\e[m HEAD@{141}: rebase (pick): Add some more interesting test cases for the linker
+\e[33m23ab0f2c31f9\e[m HEAD@{142}: rebase (pick): Oops, didn't handle hex values correctly. :(
+\e[33mc39415b7c1cd\e[m HEAD@{143}: rebase (pick): * Fix the constpoolarray -> c"" printing routines to escape things properly
+\e[33meb2b5e2b34dd\e[m HEAD@{144}: rebase (pick): *** empty log message ***
+\e[33ma28f8e125258\e[m HEAD@{145}: rebase (pick): Minor cleanup
+\e[33m131d908673ef\e[m HEAD@{146}: rebase (pick): *** empty log message ***
+\e[33mc11c83a339c8\e[m HEAD@{147}: rebase (pick): Implement linker. It's 95% working now.
+\e[33m30fa72c1feb8\e[m HEAD@{148}: rebase (pick): More interesting testcase
+\e[33m5a055ed280fd\e[m HEAD@{149}: rebase (pick): Forward operands into implicit uses as well as explicit ones.
+\e[33meab25baceb5b\e[m HEAD@{150}: rebase (pick): External methods shouldn't have argument lists
+\e[33mf2bd12a6d988\e[m HEAD@{151}: rebase (pick): Update comment, remove misleading method
+\e[33m67bb9adc5a0f\e[m HEAD@{152}: rebase (pick): Initializers are not const even if the GV is.
+\e[33mc3d3c0630d9d\e[m HEAD@{153}: rebase (pick): Add a new -d argument to dump the internal rep as assembly.
+\e[33ma7b34ac799ce\e[m HEAD@{154}: rebase (pick): Cast NULL when requested.
+\e[33m731d883c3187\e[m HEAD@{155}: rebase (pick): Added getEntryNode() and getExitNode() functions.
+\e[33m0003ef936aab\e[m HEAD@{156}: rebase (pick): Insert code to trace values at basic block and method exits.
+\e[33ma4927eee849c\e[m HEAD@{157}: rebase (pick): Insert code to trace values at basic block and method exits.
+\e[33m59a501e47f06\e[m HEAD@{158}: rebase (pick): Added routine to create a char array for a string.
+\e[33mf3328d15f543\e[m HEAD@{159}: rebase (pick): Added routine to create a char array for a string.
+\e[33m1b48aa670b0f\e[m HEAD@{160}: rebase (pick): Enable most tests.
+\e[33mb578289a8fa8\e[m HEAD@{161}: rebase (pick): Added a string global variable.
+\e[33m86d5a822efcc\e[m HEAD@{162}: rebase (pick): Two bug fixes that were suppressing some "load-constant-into-register" instrs.
+\e[33mae10fbb5bb27\e[m HEAD@{163}: rebase (pick): Move the burg file to here. Add .in suffix to indicate that it gets
+\e[33m42fcb2d89630\e[m HEAD@{164}: rebase (pick): Make the sparc.burg file be a little more flexible and rubust in the fact of
+\e[33me5eb3fe6f018\e[m HEAD@{165}: rebase (pick): Use the instruction.def file to remain up to date with future instruction
+\e[33ma95ca89e8976\e[m HEAD@{166}: rebase (pick): New file to define instructions...
+\e[33m1a9806113e30\e[m HEAD@{167}: rebase (pick): Burg files should come out of the Debug Directory for temporary files
+\e[33ma1012b17f9a7\e[m HEAD@{168}: rebase (pick): New module linking functionality prototype
+\e[33m5726d1d2ecd4\e[m HEAD@{169}: rebase (pick): Check in makefile
+\e[33mbfc372b3a5a3\e[m HEAD@{170}: rebase (pick): Fixed tags target so it only happens at root level.
+\e[33mad26264a523c\e[m HEAD@{171}: rebase (pick): Add C source for testmisc.ll
+\e[33m9c5a5f970837\e[m HEAD@{172}: rebase (pick): Dang, I screwed up the merge. This should be better
+\e[33mdb6e9ecc453f\e[m HEAD@{173}: rebase (pick): New testcase for testing constant pointers to globals
+\e[33m5eff5faafba2\e[m HEAD@{174}: rebase (pick): Test files for linker
+\e[33m77a7c277d54d\e[m HEAD@{175}: rebase (pick): MethodTypes take an explicit isVarArg argument
+\e[33m19293514b699\e[m HEAD@{176}: rebase (pick): Fix comment flyer
+\e[33m684125529570\e[m HEAD@{177}: rebase (pick): Add new linker
+\e[33mcff52fd4a48a\e[m HEAD@{178}: rebase (pick): Build the new linker
+\e[33mcba92a5489f2\e[m HEAD@{179}: rebase (pick): Use null keyword instead of kludge
+\e[33m42c3881f4c41\e[m HEAD@{180}: rebase (pick): Add more function call and prototype specific tests
+\e[33mc82370afa049\e[m HEAD@{181}: rebase (pick): Compile the transforms directory
+\e[33m6dad439c635a\e[m HEAD@{182}: rebase (pick): Start of a linker
+\e[33m71585a57f2b0\e[m HEAD@{183}: rebase (pick): Implement the invoke instruction
+\e[33m4aac971feb66\e[m HEAD@{184}: rebase (pick): * Fix a nefarious bugs: TypesEqual was wrong for varargs methods
+\e[33m81374f6531a5\e[m HEAD@{185}: rebase (pick): Convert a runtime check into an assertion
+\e[33mfc856307fe9a\e[m HEAD@{186}: rebase (pick): * Add support for Module specific constants
+\e[33m5119ee94dd54\e[m HEAD@{187}: rebase (pick): Add new TerminatorInst ctor for invoke
+\e[33m97aceab30ca0\e[m HEAD@{188}: rebase (pick): * Fix TODO
+\e[33mfdd33fff63c6\e[m HEAD@{189}: rebase (pick): Fix broken #endif
+\e[33m6eab48b3c68d\e[m HEAD@{190}: rebase (pick): * Add #include
+\e[33md64929f66211\e[m HEAD@{191}: rebase (pick): Add StringList support
+\e[33md5f1339c1461\e[m HEAD@{192}: rebase (pick): Support the invoke instruction
+\e[33m362b89b2697e\e[m HEAD@{193}: rebase (pick): Support indirect calls
+\e[33m250990a3ef85\e[m HEAD@{194}: rebase (pick): not is a keyword in ansi C++, avoid it
+\e[33mcad98049b01e\e[m HEAD@{195}: rebase (pick): * Fix privacy issues on RegToRefVecMap
+\e[33m6d8a50fb7185\e[m HEAD@{196}: rebase (pick): * Use new style casts more
+\e[33md5ef68f42b47\e[m HEAD@{197}: rebase (pick): * Add real support for global variable addresses initializing constants
+\e[33m5b89a0710636\e[m HEAD@{198}: rebase (pick): * Support writing GlobalVariables with info comments by them
+\e[33m38600d48ce25\e[m HEAD@{199}: rebase (pick): * Add support for forward references of global variable addresses
+\e[33m30567de7ef54\e[m HEAD@{200}: rebase (pick): Add operator< to ValID's so that they can be put in map's
+\e[33mc4253f651f13\e[m HEAD@{201}: rebase (pick): Remove exception specification
+\e[33me46a527bd890\e[m HEAD@{202}: rebase (pick): Support the new Invoke instruction
+\e[33mdbf3974c7876\e[m HEAD@{203}: rebase (pick): Support pointers to globals happily
+\e[33mf72067424d95\e[m HEAD@{204}: rebase (pick): Fix code to make GCC 2.96 happy
+\e[33mec668ae234aa\e[m HEAD@{205}: rebase (pick): * Add support for Invoke instructions
+\e[33mb92a0735743c\e[m HEAD@{206}: rebase (pick): Fix filename in comment
+\e[33meac143eefddc\e[m HEAD@{207}: rebase (pick): Better linux support. This file still sucks
+\e[33m98503c7ebc77\e[m HEAD@{208}: rebase (pick): Fix broken #endif
+\e[33mca3d924e3846\e[m HEAD@{209}: rebase (pick): not is a keyword in Ansi C++. Avoid it
+\e[33mc168bc53e09e\e[m HEAD@{210}: rebase (pick): Clean up initializers for GCC 2.96
+\e[33mb54fa1a20171\e[m HEAD@{211}: rebase (pick): Remove exception specification. Only slows code down.
+\e[33med95b6657e6b\e[m HEAD@{212}: rebase (pick): Changes to compile with GCC 2.96
+\e[33mc22edf4bc5a2\e[m HEAD@{213}: rebase (pick): Add comment indicating semantics of indirect calls
+\e[33m4dcafac17dcb\e[m HEAD@{214}: rebase (pick): New ctor for invoke inst
+\e[33ma8a651345904\e[m HEAD@{215}: rebase (pick): Add support for indirect calls
+\e[33maf0d7630a30d\e[m HEAD@{216}: rebase (pick): Add some casts to make GCC 2.96 happy.
+\e[33m868db5e40c09\e[m HEAD@{217}: rebase (pick): Add use_back() methods
+\e[33m08696c9b3a19\e[m HEAD@{218}: rebase (pick): Add classof implementations for User
+\e[33m3776f284eb1a\e[m HEAD@{219}: rebase (pick): Expose typedefs
+\e[33md5660029e7f9\e[m HEAD@{220}: rebase (pick): Add support for module local constants
+\e[33m8f28f49eecf5\e[m HEAD@{221}: rebase (pick): Add new opcode for Invoke instruction
+\e[33mc6c0d280af0b\e[m HEAD@{222}: rebase (pick): Minor changes, add new ctor for invoke instruction
+\e[33mf230dca276c8\e[m HEAD@{223}: rebase (pick): Add assertions
+\e[33mc4ea40ffae4f\e[m HEAD@{224}: rebase (pick): * Minor Formatting changes.
+\e[33me4f89d5176af\e[m HEAD@{225}: rebase (pick): * Add destroyConstant stuff to handle module local constants
+\e[33m0a73f5e2e880\e[m HEAD@{226}: rebase (pick): Update todo's
+\e[33mb66fb116fe18\e[m HEAD@{227}: rebase (pick): Each tools should not make tags
+\e[33m969240424993\e[m HEAD@{228}: rebase (pick): --corrected coalescing test: coalsed only if two are of the same reg class
+\e[33m54622d353dc1\e[m HEAD@{229}: rebase (pick): added support for implict operands in machine instruction
+\e[33maf225afe483a\e[m HEAD@{230}: rebase (pick): --added support for implicit operands in machine instructions
+\e[33m4c1eeb2f0207\e[m HEAD@{231}: rebase (pick): Delete *.s on clean.
+\e[33me0e2c0de0d59\e[m HEAD@{232}: rebase (pick): Record implicitRefs for each machine instruction instead of
+\e[33mc7344856e2e2\e[m HEAD@{233}: rebase (pick): Add graph edges due to implicit refs in each machine instruction.
+\e[33mda6e725984b0\e[m HEAD@{234}: rebase (pick): Added a rule for building TAGS.
+\e[33m84249865be76\e[m HEAD@{235}: rebase (pick): Repeat some libs due to circular dependences between Sparc and other
+\e[33mb41937df9bac\e[m HEAD@{236}: rebase (pick): Don't insert useful instructions in delay slot of a RETURN.
+\e[33m8ec3840fd358\e[m HEAD@{237}: rebase (pick): Insert code to load constants used as Call or Return arguments.
+\e[33mdfb65425ee14\e[m HEAD@{238}: rebase (pick): Machine-independent code generation routines used in instruction
+\e[33me8a1ea03539a\e[m HEAD@{239}: rebase (pick): Moved code generation support routines to InstrSelectionSupport.{h,cpp}.
+\e[33m920028cc0b2f\e[m HEAD@{240}: rebase (pick): Moved code generation support routines to InstrSelectionSupport.cpp.
+\e[33m362badd47ffe\e[m HEAD@{241}: rebase (pick): Moved first function to "simpleadd.ll".
+\e[33me3a87d5e89a0\e[m HEAD@{242}: rebase (pick): testmemory and sumarray now work with instruction selection.
+\e[33ma08813e66ef9\e[m HEAD@{243}: rebase (pick): --removed %g regs being allocated - fix later
+\e[33m576355e82463\e[m HEAD@{244}: rebase (pick): Add hack to get rid of malloc & free instructions for code generation
+\e[33m5566f9c03615\e[m HEAD@{245}: rebase (pick): Add comment
+\e[33m704887cc1858\e[m HEAD@{246}: rebase (pick): Support multiple global's definitions
+\e[33m97e5c873483d\e[m HEAD@{247}: rebase (pick): Factor parentness out of Module & GlobalVariable into GlobalValue
+\e[33m370c4a28a876\e[m HEAD@{248}: rebase (pick): Rename getNullPointer to getNull
+\e[33mddfe3ae972ff\e[m HEAD@{249}: rebase (pick): Rename getNullPointer to getNull
+\e[33m7b0ee1e797ab\e[m HEAD@{250}: rebase (pick): Allow duplicate constant values as long as they are compatible.
+\e[33ma13bc1844828\e[m HEAD@{251}: rebase (pick): Share ConstPoolPointer elements correctly
+\e[33mbd8752038e30\e[m HEAD@{252}: rebase (pick): Fix broken testcase
+\e[33m398a1a5573f9\e[m HEAD@{253}: rebase (pick): Add check to make sure that we dont reference MEthodType's directly
+\e[33mbdb349a55426\e[m HEAD@{254}: rebase (pick): * Both Method & GlobalVariable now subclass GlobalValue
+\e[33m5c22b0d643af\e[m HEAD@{255}: rebase (pick): Adjust test cases to match the fact that methods are now explicit pointer values, not explicit
+\e[33m1f92e9fc5d90\e[m HEAD@{256}: rebase (pick): First try at a horrible global value reference wrapper
+\e[33mebf7f8fa07e7\e[m HEAD@{257}: rebase (pick): Clean up parser, fix a bug that prevented this from working:
+\e[33meedd6c7c8622\e[m HEAD@{258}: rebase (pick): * Add support for null as a constant
+\e[33m550de7f1b919\e[m HEAD@{259}: rebase (pick): Modify testcases for new LLVM const syntax
+\e[33mdfe6c7e0aff1\e[m HEAD@{260}: rebase (pick): Commit more code over to new cast style
+\e[33m8d5994a86223\e[m HEAD@{261}: rebase (pick): Convert more code to use new style casts
+\e[33m22c53dc308b0\e[m HEAD@{262}: rebase (pick): Add more support for new style casts
+\e[33me876f00ebb60\e[m HEAD@{263}: rebase (pick): Add support for new style casts
+\e[33m0b735821091f\e[m HEAD@{264}: rebase (pick): Add support for newer cleaner isa, cast, dyn_cast
+\e[33m8f546a6b1eb9\e[m HEAD@{265}: rebase (pick): Update comments
+\e[33m154b8c0b0bdb\e[m HEAD@{266}: rebase (pick): Pull predecessor and successor iterators out of the CFG*.h files, and plop them into
+\e[33m96bfa8db5614\e[m HEAD@{267}: rebase (pick): Pull predecessor and successor iterators out of the CFG*.h files, and plop them into
+\e[33m0c5cd66015ba\e[m HEAD@{268}: rebase (pick): Comment out a paragraph that refers to a file that no longer exists
+\e[33mbf9adf15ad50\e[m HEAD@{269}: rebase (pick): Fix emission of return instructions
+\e[33maf1ab310689d\e[m HEAD@{270}: rebase (pick): Add path to as so it doesn't find llvm as if that path is set.
+\e[33m554b4bc20205\e[m HEAD@{271}: rebase (pick): Exclude a couple of tests that the regalloc stuff doesn't handle yet
+\e[33m2d6c6b32a60e\e[m HEAD@{272}: rebase (pick): Add different "cast constant value" for several possible types.
+\e[33m5a0bdbf41700\e[m HEAD@{273}: rebase (pick): Add vector `implicitUses' to class MachineCodeForVMInstr to hold values
+\e[33m69e68114634e\e[m HEAD@{274}: rebase (pick): Several fixes:
+\e[33mecfd19aa7a65\e[m HEAD@{275}: rebase (pick): removing phy regaloc - incorrect file
+\e[33mc9899c19a917\e[m HEAD@{276}: rebase (pick): Change latency of setuw and setsw to 2 cycles.
+\e[33m8e03b2d97f34\e[m HEAD@{277}: rebase (pick): Change ! ( ...== ...) to !=.
+\e[33maa06d6438043\e[m HEAD@{278}: rebase (pick): Improved dump for disp type operand.
+\e[33md09bbd3e62ee\e[m HEAD@{279}: rebase (pick): Bug fixes:
+\e[33m4542845ffac4\e[m HEAD@{280}: rebase (pick): Minor changes for bug fixes in SchedGraph.cpp.
+\e[33mf2d34339b43a\e[m HEAD@{281}: rebase (pick): Two bug fixes:
+\e[33mdadedae23021\e[m HEAD@{282}: rebase (pick): *** empty log message ***
+\e[33me30f6b836af1\e[m HEAD@{283}: rebase (pick): no major change.
+\e[33m17745bb05c7a\e[m HEAD@{284}: rebase (pick): added suggesting color support
+\e[33m0c5afc6b26f2\e[m HEAD@{285}: rebase (pick): added suggesting color suppor
+\e[33mbdaab1203288\e[m HEAD@{286}: rebase (pick): added support for suggesting colors
+\e[33m3061d7a1e42b\e[m HEAD@{287}: rebase (pick): --added suggesting colors; call/ret arg handling
+\e[33mf3d3eee7e06a\e[m HEAD@{288}: rebase (pick): Add a test for the new null keyword
+\e[33m8e9b70834fa4\e[m HEAD@{289}: rebase (pick): Implement constant pointers, and null specifically in the parser, bytecode writer, and
+\e[33md20cd6b4422b\e[m HEAD@{290}: rebase (pick): Implement a constant pointer value
+\e[33m91bf6d53e2e8\e[m HEAD@{291}: rebase (pick): Pull iterators out of CFG.h and genericize them with GraphTraits
+\e[33m1f5ff53527ab\e[m HEAD@{292}: rebase (pick): File #include file
+\e[33m60f364cc5b13\e[m HEAD@{293}: rebase (pick): Pull iterators out of CFG.h and CFGdecls and put them in Support directory
+\e[33mab4adf7cba15\e[m HEAD@{294}: rebase (pick): * Properly escape function names
+\e[33mb329ccfca12b\e[m HEAD@{295}: rebase (pick): Check in bug fix for vadve
+\e[33m3eaa426db4d4\e[m HEAD@{296}: rebase (pick): Add commands to assemble and compile a .ll file
+\e[33m0fd9a3dcc702\e[m HEAD@{297}: rebase (pick): Initial support for construction of a call graph
+\e[33mb3a3ecaf05f7\e[m HEAD@{298}: rebase (pick): Add support to print a call graph, and also add support for module level interprocedural analyses
+\e[33m464bdb4b73aa\e[m HEAD@{299}: rebase (pick): Adding the tool to the path doesn't break anything anymore
+\e[33mf1f7f171a7a5\e[m HEAD@{300}: rebase (pick): Make error report a little more useful
+\e[33m58d981ac2a15\e[m HEAD@{301}: rebase (pick): ADCE is broken but at least we know why
+\e[33mdae33afb6ab1\e[m HEAD@{302}: rebase (pick): print out value's by pointer
+\e[33mcb586b4aa067\e[m HEAD@{303}: rebase (pick): Add capability to print out call graph
+\e[33m24c1bbab59ca\e[m HEAD@{304}: rebase (pick): Global variables/complex constants have been resolved!
+\e[33m4d13ee0a9344\e[m HEAD@{305}: rebase (pick): -- fixed a ret val bug
+\e[33m19f2d28d3fb2\e[m HEAD@{306}: rebase (pick): -- removed debugging messages
+\e[33md23e458745cb\e[m HEAD@{307}: rebase (pick): -fixed return value bug.
+\e[33mb53ab66b2055\e[m HEAD@{308}: rebase (pick): Add proper support to send output to the right place
+\e[33m1da35ac9ce16\e[m HEAD@{309}: rebase (pick): Print .def files as well as other files
+\e[33m1a7c20d822d2\e[m HEAD@{310}: rebase (pick): Change debug info from #define to command line option
+\e[33mbdd630363635\e[m HEAD@{311}: rebase (pick): Change debug info from #define to command line option
+\e[33md27bcdc4d564\e[m HEAD@{312}: rebase (pick): * REMOVE extraneous debug info if DEBUG_RA is not set
+\e[33mb58b0442c078\e[m HEAD@{313}: rebase (pick): Seperate instruction definitions into new SparcInstr.def file
+\e[33m84ba33c8b41a\e[m HEAD@{314}: rebase (pick): Okay, make the member function work.
+\e[33mc14992951e06\e[m HEAD@{315}: rebase (pick): Remove global debug output fns that have been superceded by a member func
+\e[33m78a5c492e944\e[m HEAD@{316}: rebase (pick): Remove debugging output stuff
+\e[33m3f14f79d64e6\e[m HEAD@{317}: rebase (pick): Emit assembly language from the target...
+\e[33m5a780fe743b5\e[m HEAD@{318}: rebase (pick): Add emitAssembly Method
+\e[33m6d1bd8d21e41\e[m HEAD@{319}: rebase (pick): Add idea
+\e[33mf821fceb8d6a\e[m HEAD@{320}: rebase (pick): Add EmitAssembly to mf
+\e[33md2ccd8e344fc\e[m HEAD@{321}: rebase (pick): First cut at assembly output
+\e[33m7cd873804115\e[m HEAD@{322}: rebase (pick): Add emitAssemblyMethod to TargetMachine
+\e[33m8749075054d9\e[m HEAD@{323}: rebase (pick): *** empty log message ***
+\e[33mca4aeed4cda6\e[m HEAD@{324}: rebase (pick): --added methods to operand class to set/get registers after register allocation
+\e[33md3262f97ed7a\e[m HEAD@{325}: rebase (pick): -- ruchira
+\e[33m983537f3112b\e[m HEAD@{326}: rebase (pick): -- updated printing
+\e[33mdf8fc0fcada5\e[m HEAD@{327}: rebase (pick): Remove a copy of a bunch of code
+\e[33m5ff0c9da9f43\e[m HEAD@{328}: rebase (pick): C++ gives us auto_ptr's, so we might as well use them. :)
+\e[33m0a6274f4f469\e[m HEAD@{329}: rebase (pick): Fix up code a bit, remove operator<< to Assembly/Writer.h
+\e[33m8ebd15ef9e5b\e[m HEAD@{330}: rebase (pick): Remove extraneous #includes
+\e[33m992e6cf11454\e[m HEAD@{331}: rebase (pick): Move operator << from Value.h to Assembly/Writer.h
+\e[33m05c03e0a4a43\e[m HEAD@{332}: rebase (pick): Remove operator << to Assembly/Writer.h
+\e[33m32354c42e162\e[m HEAD@{333}: rebase (pick): Don't check for null on delete
+\e[33m348cbcb3414c\e[m HEAD@{334}: rebase (pick): Un-neuter makefile
+\e[33mb9015643ae16\e[m HEAD@{335}: rebase (pick): Minor changes.
+\e[33m31eddde1fbe7\e[m HEAD@{336}: rebase (pick): Folded inssel*.ll into select.ll.
+\e[33m93a7445ced49\e[m HEAD@{337}: rebase (pick): Renamed files to match the primary classes they provide.
+\e[33m73a5ca83c073\e[m HEAD@{338}: rebase (pick): Renamed a header file.
+\e[33m116c6caa7247\e[m HEAD@{339}: rebase (pick): Make class TargetMachine the common interface to all target-dependent
+\e[33m4fc2bc116a7f\e[m HEAD@{340}: rebase (pick): Allow pointer constants as well as integer and booleans.
+\e[33m4350d1b2f431\e[m HEAD@{341}: rebase (pick): Make class TargetMachine the common interface to all target-dependent
+\e[33mc3645e342ca4\e[m HEAD@{342}: rebase (pick): Renamed files to match the main classes they provide.
+\e[33m2221c6a54d56\e[m HEAD@{343}: rebase (pick): Cast unsigned to int! It was causing a nice little bug.
+\e[33m3692872402ab\e[m HEAD@{344}: rebase (pick): Minor changes.
+\e[33mfdf7be61f2e0\e[m HEAD@{345}: rebase (pick): Don't add instructions to subtree for Phi or Call.
+\e[33mc5ec3128e60a\e[m HEAD@{346}: rebase (pick): Format file header.
+\e[33m9bce80700742\e[m HEAD@{347}: rebase (pick): Add new entry/exit edges when removing delay slot nodes from the graph.
+\e[33m0c5c4e8dfb45\e[m HEAD@{348}: rebase (pick): Moved erase edge functions to class SchedGraph.
+\e[33mad74a2f916dd\e[m HEAD@{349}: rebase (pick): Renamed some header files.
+\e[33m6f280562c6f1\e[m HEAD@{350}: rebase (pick): Moved erase-edge functions from SchedGraphNode to SchedGraph.
+\e[33mc20d754ef692\e[m HEAD@{351}: rebase (pick): Moved DebugValue to Value.cpp.
+\e[33ma18896cb69d9\e[m HEAD@{352}: rebase (pick): Added debugging support.
+\e[33mb99a5873a966\e[m HEAD@{353}: rebase (pick): Moved debugging interfaces for class Value to Value.h.
+\e[33mde14aceb2e19\e[m HEAD@{354}: rebase (pick): Minor fixes: renamed target machine files; fold sched info into TargetMachine.
+\e[33m1fabb8f4d05b\e[m HEAD@{355}: rebase (pick): Make class TargetMachine the common interface to all target-dependent
+\e[33m004e1e8c9bd5\e[m HEAD@{356}: rebase (pick): Added debugging support.
+\e[33m5308e6f9d6ca\e[m HEAD@{357}: rebase (pick): Fix testcases to handle new syntax for construction and initializeation
+\e[33m23bc63990bca\e[m HEAD@{358}: rebase (pick): Remove the unsized array constraint
+\e[33m23b021feb086\e[m HEAD@{359}: rebase (pick): Add support for global constants, and for initializers for constants
+\e[33m1f2803d9c6b3\e[m HEAD@{360}: rebase (pick): Add support for global constants, and for initializers for constants
+\e[33me1fed6f079c9\e[m HEAD@{361}: rebase (pick): added a method to get reg num after register allocation
+\e[33mae7bbf4710cc\e[m HEAD@{362}: rebase (pick): modified machine code printing
+\e[33m13af7a7caac6\e[m HEAD@{363}: rebase (pick): -modified machine operand class - took regNum out of union to set regNum after
+\e[33m6bddc120b229\e[m HEAD@{364}: rebase (pick): modified printing of debug messages
+\e[33m313c2a193181\e[m HEAD@{365}: rebase (pick): --added methods for printing
+\e[33mb8916ea9dfc9\e[m HEAD@{366}: rebase (pick): added setRegForValue to MachineOperand class
+\e[33m072b09e468f8\e[m HEAD@{367}: rebase (pick): fixed printing messages
+\e[33m357bf235defd\e[m HEAD@{368}: rebase (pick): -- debug messages dissabled
+\e[33mb3a9794066b2\e[m HEAD@{369}: rebase (pick): added reg alloc support
+\e[33m4ac010f69361\e[m HEAD@{370}: rebase (pick): --reg alloc code added
+\e[33mc7e1696e212a\e[m HEAD@{371}: rebase (pick): -reg alloc code
+\e[33m74fe0add218c\e[m HEAD@{372}: rebase (pick): added register allocation code
+\e[33m1c1d5b77ea72\e[m HEAD@{373}: rebase (pick): Added regalloc
+\e[33m261723120208\e[m HEAD@{374}: rebase (pick): Oops, accidentally checked my debugging makefile
+\e[33mccba943ebd24\e[m HEAD@{375}: rebase (pick): Fix a bug with not removing method level types after compilation
+\e[33m32436a343662\e[m HEAD@{376}: rebase (pick): added RegAlloc Directory to DIRS
+\e[33m1c24930f9da4\e[m HEAD@{377}: rebase (pick): *** empty log message ***
+\e[33mcac3722a15a8\e[m HEAD@{378}: rebase (pick): *** empty log message ***
+\e[33mc6554b4537c1\e[m HEAD@{379}: rebase (pick): Remove invalid testcase
+\e[33m847094903baa\e[m HEAD@{380}: rebase (pick): Remove invalid testcase. Unneccesary anyways
+\e[33md71ff5c79c96\e[m HEAD@{381}: rebase (pick): Add new test cases
+\e[33m7789d9c7f54d\e[m HEAD@{382}: rebase (pick): Add support for loading and storing pointers...
+\e[33ma3aa024f5831\e[m HEAD@{383}: rebase (pick): Fix a bug that caused a crash if a setcc had zero uses.
+\e[33mc70348cb828c\e[m HEAD@{384}: rebase (pick): Add a forward decl, oops.
+\e[33m85c86566e9a5\e[m HEAD@{385}: rebase (pick): Chris seems fond of #include <vector>. Fix these. Also convert use list in
+\e[33m3edb0d2e080e\e[m HEAD@{386}: rebase (pick): Add a comment
+\e[33m5c8a3647ccb6\e[m HEAD@{387}: rebase (pick): Minor reformatting, & protection fixes
+\e[33mec87fa4f8523\e[m HEAD@{388}: rebase (pick): Break scheduling infrastructure out of TargetMachine.cpp into SchedInfo.cpp
+\e[33md589bb98df47\e[m HEAD@{389}: rebase (pick): Split Register specific stuff out from TargetMachine.h to RegInfo.h
+\e[33mec018be202c8\e[m HEAD@{390}: rebase (pick): Split Target/Machine.h into three files:
+\e[33m53bcc4463c09\e[m HEAD@{391}: rebase (pick): Make a new llvm/Target #include directory.
+\e[33maaca226978d7\e[m HEAD@{392}: rebase (pick): Checkin changes to:
+\e[33m9cec2d47b443\e[m HEAD@{393}: rebase (pick): Checkin changes to:
+\e[33m3b15eb471b31\e[m HEAD@{394}: rebase (pick): Move files to new sparc directory
+\e[33m11954336afe2\e[m HEAD@{395}: rebase (pick): Move the sparc target to a new lib/Target directory
+\e[33ma8d3715d2038\e[m HEAD@{396}: rebase (pick): Move files.
+\e[33m82cb584aec3c\e[m HEAD@{397}: rebase (pick): Move the contents of the CodeGen/TargetMachine/Sparc directory to Target/Sparc
+\e[33m1799226a9df7\e[m HEAD@{398}: rebase (pick): This checkin represents some cleanup of the backend, implementing the following things:
+\e[33m2153a7e280f6\e[m HEAD@{399}: rebase (pick): This checkin represents some cleanup of the backend, implementing the following things:
+\e[33m9936a71b49ba\e[m HEAD@{400}: rebase (pick): Updates to use local header files.
+\e[33mddef6185b427\e[m HEAD@{401}: rebase (pick): Export the instruction forest support from the analysis library
+\e[33m44e4e80c2911\e[m HEAD@{402}: rebase (pick): Initial instruction tree support for the analysis library
+\e[33m001ff12fbe1c\e[m HEAD@{403}: rebase (pick): Generic k-way tree support
+\e[33m015b075f7f69\e[m HEAD@{404}: rebase (pick): More cleanups, preparing to revamp InstrForest to, among other things,
+\e[33md6c5ea5c2392\e[m HEAD@{405}: rebase (pick): * Clean up InstrForest
+\e[33m8f70795fa947\e[m HEAD@{406}: rebase (pick): Eliminate 'BasicNode' from InstrForest.
+\e[33m02e210b78442\e[m HEAD@{407}: rebase (pick): Eliminate MainTreeNode function
+\e[33mbacc3815ee3a\e[m HEAD@{408}: rebase (pick): Remove irrelevant gross K&R Cisms
+\e[33m99dec15bddc1\e[m HEAD@{409}: rebase (pick): Handle subtract in expression classifier
+\e[33m9c9d9777ee76\e[m HEAD@{410}: rebase (pick): Disable destructors on constants
+\e[33m58b30135c56a\e[m HEAD@{411}: rebase (pick): Use the correct style casts
+\e[33m6fb05a7fb6f1\e[m HEAD@{412}: rebase (pick): Use correct style casts
+\e[33mf6d78c00b28d\e[m HEAD@{413}: rebase (pick): Use correct style casts
+\e[33mbd9287aa5602\e[m HEAD@{414}: rebase (pick): Use type checking predicates
+\e[33mb760399acaf2\e[m HEAD@{415}: rebase (pick): Use correct casts
+\e[33m86f6acb766bb\e[m HEAD@{416}: rebase (pick): Use predicate for Value type test
+\e[33mb1223a7dc00c\e[m HEAD@{417}: rebase (pick): Use predicate for Value type test
+\e[33m5dbd964b9fbc\e[m HEAD@{418}: rebase (pick): ModuleTyID doesn't exist anyymore
+\e[33mc583d68d95f8\e[m HEAD@{419}: rebase (pick): getMethodType is now just getType
+\e[33m862b2212c267\e[m HEAD@{420}: rebase (pick): Add support for printing globals
+\e[33m9815c0143466\e[m HEAD@{421}: rebase (pick): Update to use correct type cast
+\e[33m4ebfeafd5ae2\e[m HEAD@{422}: rebase (pick): Add support for global variables
+\e[33m7309e89eeead\e[m HEAD@{423}: rebase (pick): * Add capability of printing out a global variable
+\e[33m332d403bc73d\e[m HEAD@{424}: rebase (pick): * Method::getType should return type cast as MethodType, eliminate getMethodType
+\e[33m09b1c8b53b5b\e[m HEAD@{425}: rebase (pick): Update assertion to allow extra case
+\e[33mc9f650f82da6\e[m HEAD@{426}: rebase (pick): Fix a bug I introduced (assertion failed: Unknown operand type), and convert to predicate style for type checks
+\e[33mca665a4f7301\e[m HEAD@{427}: rebase (pick): Implement global variable support
+\e[33m78c27fc8588b\e[m HEAD@{428}: rebase (pick): Add support for external methods
+\e[33m3b4968db64d9\e[m HEAD@{429}: rebase (pick): Genericize support for calling functions a bit
+\e[33mf2292a6f5bef\e[m HEAD@{430}: rebase (pick): Add support for tool specified linker options
+\e[33me7d26918d539\e[m HEAD@{431}: rebase (pick): Remove the definitions of 3 global functions that don't belong in the core
+\e[33m3268cb00c3aa\e[m HEAD@{432}: rebase (pick): Implement the subset of the GetConstantValueAsSignedInt function that is needed, locally. Remove the two support functions to inline their contents.
+\e[33m5ce25378872d\e[m HEAD@{433}: rebase (pick): Implement the subset of the GetConstantValueAsSignedInt function that is needed, locally.
+\e[33m7f1dfe6c75ba\e[m HEAD@{434}: rebase (pick): Remove 3 gross global functions that don't belong here
+\e[33mbcfd7d3b4a2f\e[m HEAD@{435}: rebase (pick): Rename contype to subtype
+\e[33m925282156193\e[m HEAD@{436}: rebase (pick): Make ADCE more robust, it still has problems, but it's getting closer
+\e[33ma8aa73f44e44\e[m HEAD@{437}: rebase (pick): Fix problems with freeing memory twice
+\e[33m3e58e695c052\e[m HEAD@{438}: rebase (pick): Rename file to be consistent with header name
+\e[33m45093beca645\e[m HEAD@{439}: rebase (pick): Rerun backend tests if as or llc is changed
+\e[33m920978127ffb\e[m HEAD@{440}: rebase (pick): iFix dependence order
+\e[33m0dda5dffe9e1\e[m HEAD@{441}: rebase (pick): Clean up Type class by removing mutable ConstRules member and use annotations insead
+\e[33m8926543a23ba\e[m HEAD@{442}: rebase (pick): Clean up ConstRules stuff to use annotations instead of a mutable member in Type
+\e[33m0554a9254254\e[m HEAD@{443}: rebase (pick): Convert ConstRules to use annotations to clean it up.
+\e[33mae70148c0e33\e[m HEAD@{444}: rebase (pick): Fix automatic dependence on static libs
+\e[33m57a4461c8737\e[m HEAD@{445}: rebase (pick): Handle cast float-to-float or cast double-to-double.
+\e[33me26d17b941c6\e[m HEAD@{446}: rebase (pick): Fix build breakage. :(
+\e[33m468369dd37c3\e[m HEAD@{447}: rebase (pick): I really don't like it when people break the build.
+\e[33m093db3f2c28b\e[m HEAD@{448}: rebase (pick): Remove extraneous space
+\e[33md7fa14961741\e[m HEAD@{449}: rebase (pick): Remove extra #include
+\e[33m13c90b0c405c\e[m HEAD@{450}: rebase (pick): *** empty log message ***
+\e[33mad0e744b8800\e[m HEAD@{451}: rebase (pick): *** empty log message ***
+\e[33m479d6ea91cea\e[m HEAD@{452}: rebase (pick): Committed for compliation. Not yet final.
+\e[33m3e3b370cfca9\e[m HEAD@{453}: rebase (pick): --Ruchira
+\e[33m215ca905feb5\e[m HEAD@{454}: rebase (pick): New testcase to deal with lists
+\e[33m91c3618d9fba\e[m HEAD@{455}: rebase (pick): New file for supporting abstract types
+\e[33md0201e668537\e[m HEAD@{456}: rebase (pick): Make use of the new TOOLNAME/USEDLIBS options provided in Makefile.common
+\e[33medadb7525ef9\e[m HEAD@{457}: rebase (pick): Executables all live in a nice centralized location now
+\e[33ma461b8412da2\e[m HEAD@{458}: rebase (pick): Executables have moved into centralized location
+\e[33mf02709b9d7a9\e[m HEAD@{459}: rebase (pick): Support TOOLNAME and USEDLIBS options for easier tool building
+\e[33me41581d43385\e[m HEAD@{460}: rebase (pick): Remove old old file
+\e[33mcb93b76e7fdc\e[m HEAD@{461}: rebase (pick): Convert llc driver to standard tool format
+\e[33mcb8ea37f651a\e[m HEAD@{462}: rebase (pick): Provide a way to change the incoming value for a phi node
+\e[33m21daac648d0a\e[m HEAD@{463}: rebase (pick): Add llc path to setup
+\e[33ma3f8c0135396\e[m HEAD@{464}: rebase (pick): Uhm... that was really bad
+\e[33ma428778af63a\e[m HEAD@{465}: rebase (pick): Clean up driver
+\e[33m545e4d0d6342\e[m HEAD@{466}: rebase (pick): Make makefile not depend on where stuff is installed!!!!
+\e[33m63fb58422942\e[m HEAD@{467}: rebase (pick): Updates to work with new lack of constant pool
+\e[33md08a74d2397c\e[m HEAD@{468}: rebase (pick): Remove unneeded #includes
+\e[33m17ba4b1a7377\e[m HEAD@{469}: rebase (pick): Remove unnecesary #include add dump calls pulled out of .h file
+\e[33m4baa9c258dc7\e[m HEAD@{470}: rebase (pick): * Remove lots of #includes
+\e[33m5fbff64a9093\e[m HEAD@{471}: rebase (pick): * Remove lots of unnecesary #includes
+\e[33mfa24fc193248\e[m HEAD@{472}: rebase (pick): * Remove lots of annoying extra #includes
+\e[33m4a1115871ab1\e[m HEAD@{473}: rebase (pick): * Add tag so emacs knows it's a c++ file
+\e[33maa1f51a47db4\e[m HEAD@{474}: rebase (pick): Add tags so emacs knows these are C++ files
+\e[33m66cdfde08ddd\e[m HEAD@{475}: rebase (pick): Remove extra space
+\e[33mdf7b57cb2016\e[m HEAD@{476}: rebase (pick): Remove ReversePostOrderTraversal declaration
+\e[33me182a70686df\e[m HEAD@{477}: rebase (pick): * Don't predefine ReversePostOrderTraversal because it adds a dependence on vector
+\e[33ma7b751de9148\e[m HEAD@{478}: rebase (pick): Check opaque, abstract, and recursive type handling
+\e[33mf65fc4c4b0ca\e[m HEAD@{479}: rebase (pick): NEw file
+\e[33mf5797eee291e\e[m HEAD@{480}: rebase (pick): Moved functionality into the other constant pool stuff
+\e[33mc317aff403de\e[m HEAD@{481}: rebase (pick): Follow the golden rule of the coding standards guide: Make the code look
+\e[33m228b2301a5b8\e[m HEAD@{482}: rebase (pick): The header file for a translation unit should always be included first
+\e[33mec28d6b33de6\e[m HEAD@{483}: rebase (pick): A file should always include it's private header file *FIRST* see the
+\e[33ma4fd66e4bb44\e[m HEAD@{484}: rebase (pick): Constant pool is eliminated
+\e[33m895e8966aaf7\e[m HEAD@{485}: rebase (pick): Add support for iteration through type graphs
+\e[33m1bc1a1e55811\e[m HEAD@{486}: rebase (pick): Remove support for const pool merging, which is obsolete now.
+\e[33m1f68aecd491b\e[m HEAD@{487}: rebase (pick): Annotations are now const
+\e[33maa592d53a869\e[m HEAD@{488}: rebase (pick): Build lli first
+\e[33ma7352c105c5a\e[m HEAD@{489}: rebase (pick): Symboltables are sorted in the bytecode, so no problems here!
+\e[33m5fdc17bb41c2\e[m HEAD@{490}: rebase (pick): Cleanup
+\e[33m98cf8e526cfc\e[m HEAD@{491}: rebase (pick): Support abstract types
+\e[33me64122141c47\e[m HEAD@{492}: rebase (pick): Support a abstract, opaque, and recursive types
+\e[33m299db7ad37f6\e[m HEAD@{493}: rebase (pick): Types and constnats are wierd objects in the symtabs
+\e[33m391ecb41103e\e[m HEAD@{494}: rebase (pick): Modules must have a valid, nonnull type. Make them void
+\e[33m186d4233d066\e[m HEAD@{495}: rebase (pick): Support new setName interface
+\e[33m7339777dc091\e[m HEAD@{496}: rebase (pick): * Support new setname interface
+\e[33mba310ef38dcf\e[m HEAD@{497}: rebase (pick): * Cnstants are now global objects
+\e[33m05ef1117f8d2\e[m HEAD@{498}: rebase (pick): Support new setName itf
+\e[33m3d922776af3d\e[m HEAD@{499}: rebase (pick): Annotations are const objects now
+\e[33m3ad5e85b0e7c\e[m HEAD@{500}: rebase (pick): Types and constants are wierd things in symbol tables now
+\e[33me95eeb238191\e[m HEAD@{501}: rebase (pick): * Eliminate reference to ConstantPool class
+\e[33m69013e51442c\e[m HEAD@{502}: rebase (pick): Constant pool is dead
+\e[33m6aabf9bb8d09\e[m HEAD@{503}: rebase (pick): Constants are now global unique objects
+\e[33m5eccfe8f4744\e[m HEAD@{504}: rebase (pick): * Eliminate constant pool dependancies:
+\e[33m116bd1f60c7d\e[m HEAD@{505}: rebase (pick): * Supoprt global constants
+\e[33m719ec15e3bca\e[m HEAD@{506}: rebase (pick): * Support global constants
+\e[33m3e22e6fbc35c\e[m HEAD@{507}: rebase (pick): annotations are now const
+\e[33m94469c594e8f\e[m HEAD@{508}: rebase (pick): * Emit bytecode using a deque instead of a vector to be faster
+\e[33mcd31dfffe14a\e[m HEAD@{509}: rebase (pick): * Remove support for internal constant pool
+\e[33m0ccb4914c583\e[m HEAD@{510}: rebase (pick): * Assembly writer is not a module analyzer anymore
+\e[33m81be60efae5b\e[m HEAD@{511}: rebase (pick): * Add support for forward referencing types
+\e[33m92f9faa8cd41\e[m HEAD@{512}: rebase (pick): Add support for forward referencing types
+\e[33m7cb39bcc9b11\e[m HEAD@{513}: rebase (pick): Add support for an opaque type
+\e[33m0cc953a4eb36\e[m HEAD@{514}: rebase (pick): Remove #include of nonexistant header file
+\e[33me659434201e7\e[m HEAD@{515}: rebase (pick): * Slot calc is now simpler and not based on module analyzer.
+\e[33md9953427123b\e[m HEAD@{516}: rebase (pick): Module analyzer no longer has to iterate over constant pool
+\e[33m59b2b4978c66\e[m HEAD@{517}: rebase (pick): Simplify code by eliminating need to hang onto constant pool references
+\e[33mca915a915738\e[m HEAD@{518}: rebase (pick): * Fixed mapped_iterator to actually work with functors
+\e[33mdb2d5ad6fc13\e[m HEAD@{519}: rebase (pick): Constant pools no longer exist
+\e[33me6503b4355e7\e[m HEAD@{520}: rebase (pick): Eliminate DoConstantPoolMerging. ConstantPools no longer exist
+\e[33m8e819e87f9aa\e[m HEAD@{521}: rebase (pick): You no longer have to delete constants! They are located in a global
+\e[33m9e1456843e33\e[m HEAD@{522}: rebase (pick): Annotations are now passed around as const objects
+\e[33m37781e4265d3\e[m HEAD@{523}: rebase (pick): Use a deque instead of a vector for greater efficiency writing bytecode
+\e[33m68b52d48b8d2\e[m HEAD@{524}: rebase (pick): Clean stuff up.
+\e[33mef8df94e3aba\e[m HEAD@{525}: rebase (pick): Simplify SlotCalculator. SlotCalculator is now not a ModuleAnalyzer
+\e[33m220b450fb4a8\e[m HEAD@{526}: rebase (pick): Simplify analyzer
+\e[33m435cda780cfc\e[m HEAD@{527}: rebase (pick): * Fix long standing problems that would affect inlining. How could this have worked?
+\e[33m0cb567d4d189\e[m HEAD@{528}: rebase (pick): Add assertion to check for
+\e[33me0ab1c69297f\e[m HEAD@{529}: rebase (pick): * Values are AbstactTypeUsers to support abstract types
+\e[33m16c83b3c1356\e[m HEAD@{530}: rebase (pick): Remove extra whitespace at EOL
+\e[33ma2e45cbc6285\e[m HEAD@{531}: rebase (pick): * Add support for Opaque & Abstract types.
+\e[33m875576a6650b\e[m HEAD@{532}: rebase (pick): Support abstract types by keeping on the use list of the abstract type.
+\e[33m70bc7b10091b\e[m HEAD@{533}: rebase (pick): SymTabValues no longer hold constant pools
+\e[33mc3d4689a42cb\e[m HEAD@{534}: rebase (pick): SymTabValue no longer includes ValueHolder for Module. Include it ourself
+\e[33maefcbb9a7f94\e[m HEAD@{535}: rebase (pick): * Support new setName interface
+\e[33m22059fea78a8\e[m HEAD@{536}: rebase (pick): Support new setName interface
+\e[33m30dd0bdb5f35\e[m HEAD@{537}: rebase (pick): * Add new DerivedType base class that goes between Type and the derived types
+\e[33mfb9e4e1fcdc4\e[m HEAD@{538}: rebase (pick): Implement support for globally unique constants. Constants no longer live
+\e[33m924247d31d99\e[m HEAD@{539}: rebase (pick): Add support for walking type graphs
+\e[33mfa3aa419ab9f\e[m HEAD@{540}: rebase (pick): Changing setName semantics
+\e[33m38d0897ea620\e[m HEAD@{541}: rebase (pick): Make annotations operations const with a mutable annotation list so that
+\e[33m59216be202de\e[m HEAD@{542}: rebase (pick): Fixed the "output constant pool even if he have no constants" issue
+\e[33mab906331394b\e[m HEAD@{543}: rebase (pick): whoo hoo I did something! :)
+\e[33m628ad7914f58\e[m HEAD@{544}: rebase (pick): Make fib be more real
+\e[33me5ad7ea67698\e[m HEAD@{545}: rebase (pick): *** empty log message ***
+\e[33m147dbdd611ae\e[m HEAD@{546}: rebase (pick): *** empty log message ***
+\e[33m07a717031897\e[m HEAD@{547}: rebase (pick): Added directory LiveVar/
+\e[33m2b9d47fba512\e[m HEAD@{548}: rebase (pick): Makefile for tools/tests/
+\e[33mef1302a7da62\e[m HEAD@{549}: rebase (pick): Driver to test IsPowerOf2. Could be extended for other library routines.
+\e[33meb98e995c108\e[m HEAD@{550}: rebase (pick): Add testcodegen target, and restrict which tests are run for it.
+\e[33m8e434f5bede3\e[m HEAD@{551}: rebase (pick): Added nonterminals for arithmetic operations where one operand is constant.
+\e[33m8846488b12e7\e[m HEAD@{552}: rebase (pick): Changed link line.
+\e[33mb9204403813b\e[m HEAD@{553}: rebase (pick): Add calls to NormalizeMethod() and to ScheduleInstructionsWithSSA().
+\e[33mad0b73970f13\e[m HEAD@{554}: rebase (pick): Makefile for InstrSched/
+\e[33m03d07894e506\e[m HEAD@{555}: rebase (pick): Remove source list.
+\e[33mbf1f10e707bf\e[m HEAD@{556}: rebase (pick): Added directory InstrSched.
+\e[33mdb25e211611a\e[m HEAD@{557}: rebase (pick): Major changes too hard to document :-)
+\e[33m6195f94883e7\e[m HEAD@{558}: rebase (pick): Added function MachineInstr::operandIsDefined(i) and decl for
+\e[33m4aa6182a26f1\e[m HEAD@{559}: rebase (pick): Extensive additions for supporting instruction scheduling.
+\e[33m21aba4339c60\e[m HEAD@{560}: rebase (pick): Added class MachineSchedInfo and several supporting classes
+\e[33md0513476dc87\e[m HEAD@{561}: rebase (pick): Implementation of instruction scheduling for LLVM.
+\e[33m3222a43515d4\e[m HEAD@{562}: rebase (pick): Class that encapsulates priority heuristics for instruction scheduling.
+\e[33ma3bb9d7ef0f4\e[m HEAD@{563}: rebase (pick): Scheduling DAG for instruction scheduling. Currently for a single basic block.
+\e[33mf4be165ab676\e[m HEAD@{564}: rebase (pick): Moved debug options declaration to header file, and moved
+\e[33mf914ba215bc2\e[m HEAD@{565}: rebase (pick): Moved function PrintMachineInstructions here.
+\e[33mfb1a19d9a411\e[m HEAD@{566}: rebase (pick): analyze() now checks to see that we don't analyze the same method twice.
+\e[33m9e8f74af6ec5\e[m HEAD@{567}: rebase (pick): *** empty log message ***
+\e[33m3a2656af412d\e[m HEAD@{568}: rebase (pick): Simplification transformations to normalize the code for later passes.
+\e[33mbbb02c1d7c9b\e[m HEAD@{569}: rebase (pick): Use const int instead of #define.
+\e[33md0b683357562\e[m HEAD@{570}: rebase (pick): Add copy and assignment operators for POIterator, and
+\e[33m9f98fb5b9284\e[m HEAD@{571}: rebase (pick): Added InstrSched library to link line.
+\e[33mdac45308ccd6\e[m HEAD@{572}: rebase (pick): I suck
+\e[33mff67dcc22be0\e[m HEAD@{573}: rebase (pick): Initial checkin of TargetData code
+\e[33m8472822ff914\e[m HEAD@{574}: rebase (pick): Remove target specific stuff from Type classes
+\e[33m13bd108c03e0\e[m HEAD@{575}: rebase (pick): Remove target specific method from MemAccessInst class
+\e[33m2771054dbf3e\e[m HEAD@{576}: rebase (pick): Convert to use the new factored out TargetData class
+\e[33mddadbddb187b\e[m HEAD@{577}: rebase (pick): Factor code out to the TargetData class
+\e[33m3e08de6cee86\e[m HEAD@{578}: rebase (pick): Use the new TargetData class to factor out some of the shared code
+\e[33m729c3d47e91e\e[m HEAD@{579}: rebase (pick): Remove target specific method.
+\e[33m5ca1a2bcbc44\e[m HEAD@{580}: rebase (pick): Remove target specific code, move to TargetData.cpp file
+\e[33m7cd798c969a4\e[m HEAD@{581}: rebase (pick): Support passing a data pointer to annotation factory methods
+\e[33m3b3efaeeaf76\e[m HEAD@{582}: rebase (pick): Demolish explicit source list
+\e[33m1afbb4027fae\e[m HEAD@{583}: rebase (pick): Extend annotations to pass data pointers around to the functions
+\e[33m74782cb4a340\e[m HEAD@{584}: rebase (pick): Add another TODO: sigh
+\e[33mab8c3000e11e\e[m HEAD@{585}: rebase (pick): Lots of new functionality
+\e[33ma9a8941bb775\e[m HEAD@{586}: rebase (pick): Remove explicit source list
+\e[33mf011d42626b3\e[m HEAD@{587}: rebase (pick): Add dependence to libvmcore.
+\e[33m37c91bae4bcd\e[m HEAD@{588}: rebase (pick): Make sure noone branches to the entry node of the method
+\e[33mee0ddad61d01\e[m HEAD@{589}: rebase (pick): Compile LLI
+\e[33md34454f43919\e[m HEAD@{590}: rebase (pick): Rename start methods to main so interpreter works easier
+\e[33m44dfadcd4a33\e[m HEAD@{591}: rebase (pick): Add annotation support
+\e[33m03d42fd345d1\e[m HEAD@{592}: rebase (pick): Handle case where there is no exit node from a flowgraph
+\e[33m6c329f4eaed8\e[m HEAD@{593}: rebase (pick): Changed an assertion message
+\e[33m350d117dbdd5\e[m HEAD@{594}: rebase (pick): Add annotation support to value
+\e[33m311767f056af\e[m HEAD@{595}: rebase (pick): * Add assertions
+\e[33m55c6be031f13\e[m HEAD@{596}: rebase (pick): Initial checkin of interpreter
+\e[33m3fdb0df0b0b2\e[m HEAD@{597}: rebase (pick): LV code on machine instructions
+\e[33m19e88d249e25\e[m HEAD@{598}: rebase (pick): LV info on machine instructions
+\e[33mb1dfaf6145ab\e[m HEAD@{599}: rebase (pick): Corrected the compilation error by making the ValOperator class a friend of
+\e[33m3059c0b24b7c\e[m HEAD@{600}: rebase (pick): Always set isDef for operand in position resultPos.
+\e[33m081ab0fa9e0f\e[m HEAD@{601}: rebase (pick): Changed SetMachineOpernad calls in Set3OperandsFromInstr so that the
+\e[33m6be8772e0463\e[m HEAD@{602}: rebase (pick): Changed case 64 to make the first arg of phi a defintion
+\e[33mabc698370478\e[m HEAD@{603}: rebase (pick): Can't use ref to stack value!
+\e[33m56e7b4262d3e\e[m HEAD@{604}: rebase (pick): Needed old conditions as well as new in skipToNextVal()!
+\e[33m2b2d58164051\e[m HEAD@{605}: rebase (pick): Bug fix in ValOpIterator: not moving past operand with NULL Value.
+\e[33m4a1a05bc1473\e[m HEAD@{606}: rebase (pick): *** empty log message ***
+\e[33m32525540235d\e[m HEAD@{607}: rebase (pick): added a default isDef arg to SetMachineOperand method - Ruchira
+\e[33mac7c6045f846\e[m HEAD@{608}: rebase (pick): Added isDef field to MachineOperand class - Ruchira
+\e[33mf0942ac597e7\e[m HEAD@{609}: rebase (pick): Add CC operand as 4th operand of SUBcc, and mark it as a def.
+\e[33m9568ebd1a049\e[m HEAD@{610}: rebase (pick): Use extra operand for instructions that set a CC register that
+\e[33m17d5bdb8c5dc\e[m HEAD@{611}: rebase (pick): Also, move burg rule to Makefile.common.
+\e[33m5efe6ec39c6f\e[m HEAD@{612}: rebase (pick): And add rule to create a .cpp source file from burg input file!
+\e[33m5b8a3ae17209\e[m HEAD@{613}: rebase (pick): Better still, lets move pathname for Burg to Makefile.common.
+\e[33m415c589a5b97\e[m HEAD@{614}: rebase (pick): Add path and options for burg.
+\e[33m15a90d21c83f\e[m HEAD@{615}: rebase (pick): Use full pathname for burg.
+\e[33m044f893ad519\e[m HEAD@{616}: rebase (pick): Allow numOperands of -1 for variable #operands.
+\e[33m6b7eebde250d\e[m HEAD@{617}: rebase (pick): Simplify command line options, and add option for printing
+\e[33m5ac12a3af462\e[m HEAD@{618}: rebase (pick): Had used the wrong option.
+\e[33m27df4e0f0c54\e[m HEAD@{619}: rebase (pick): Added tree nodes for Phi instructions.
+\e[33m3d470f658f50\e[m HEAD@{620}: rebase (pick): Generate tree nodes for Phi instructions.
+\e[33m5745231c1ee0\e[m HEAD@{621}: rebase (pick): Allow machine instructions with variable numbers of arguments.
+\e[33m3de046767b96\e[m HEAD@{622}: rebase (pick): Added dummy Phi instruction.
+\e[33m7df9d89320cb\e[m HEAD@{623}: rebase (pick): Generate dummy Phi machine instruction, plus a bug fix for BrCond(boolreg).
+\e[33m371350759bd5\e[m HEAD@{624}: rebase (pick): Added support for testing instruction selection on all but 2 tests.
+\e[33m09c28c22fde1\e[m HEAD@{625}: rebase (pick): Added class MachineCodeForBasicBlock.
+\e[33mee4ef4ffe10c\e[m HEAD@{626}: rebase (pick): Record machine instructions in the vector for each basic block.
+\e[33m75e6a0432e3b\e[m HEAD@{627}: rebase (pick): Added vector of machine instructions for the basic block.
+\e[33m6c523d7b3a45\e[m HEAD@{628}: rebase (pick): New test cases
+\e[33ma991e5fcc19d\e[m HEAD@{629}: rebase (pick): Remove some gross stuff
+\e[33m33162a8d8802\e[m HEAD@{630}: rebase (pick): Allow vararg method types with 0 fixed types
+\e[33m18a61fcb43a4\e[m HEAD@{631}: rebase (pick): Make error msg nicer
+\e[33mc3e2fe5af54b\e[m HEAD@{632}: rebase (pick): Enable the elimination of method prototypes that are not referenced
+\e[33m8fb736efbcdd\e[m HEAD@{633}: rebase (pick): * Make sure that the size of the type field can also control the output
+\e[33ma9dab08596d3\e[m HEAD@{634}: rebase (pick): * Add calls to failure template so that it is actually possible to debug
+\e[33m077a425d4516\e[m HEAD@{635}: rebase (pick): * Fix bugs
+\e[33m03c4f8933762\e[m HEAD@{636}: rebase (pick): * Enable the use of escaped literal strings
+\e[33m934c4b501a22\e[m HEAD@{637}: rebase (pick): Modify var names to make it apparant that the code is really generic
+\e[33m0a587153f15f\e[m HEAD@{638}: rebase (pick): Changes to make test scripts more reliable
+\e[33me67cf2e7e23d\e[m HEAD@{639}: rebase (pick): Add test of string constants
+\e[33mc20b0ebc51c4\e[m HEAD@{640}: rebase (pick): Added function printIndent.
+\e[33m841fdaf6e2f7\e[m HEAD@{641}: rebase (pick): Added a pointer hash function object for use in pointer maps.
+\e[33m65fb5153e342\e[m HEAD@{642}: rebase (pick): Make a function const.
+\e[33m0762b37e7677\e[m HEAD@{643}: rebase (pick): Remove lib/LLC library.
+\e[33mcf6a5702c91e\e[m HEAD@{644}: rebase (pick): Added several SPARC instructions including conditional move and SETHI.
+\e[33m1fc9217c15ee\e[m HEAD@{645}: rebase (pick): Remove redundant and unused functions.
+\e[33m76b1285bfdc7\e[m HEAD@{646}: rebase (pick): Added UltraSparcInstrInfo class to specialize class MachineInstrInfo.
+\e[33m6e560c22a4f9\e[m HEAD@{647}: rebase (pick): Eliminate unused function.
+\e[33m5384b204a5da\e[m HEAD@{648}: rebase (pick): Bug fixes:
+\e[33m898348afb52d\e[m HEAD@{649}: rebase (pick): Added MachineInstrInfo class and moved instruction-related members there.
+\e[33m0c2462a079ed\e[m HEAD@{650}: rebase (pick): Eliminate separate enum for operand register type.
+\e[33meac34ac45c71\e[m HEAD@{651}: rebase (pick): Work around a few 'sorting issues' with the bytecode output that causes the bytecode
+\e[33m94e2da805ed4\e[m HEAD@{652}: rebase (pick): Don't write out constants that do not have a name, they will be inlined.
+\e[33m0fb64b07f943\e[m HEAD@{653}: rebase (pick): Refactor some of the constant stuff so that we can return complex constant
+\e[33mad7945a175d6\e[m HEAD@{654}: rebase (pick): Add an arg to insertVal to allow us to prevent builtin types from being ignored
+\e[33mfe70c81141d7\e[m HEAD@{655}: rebase (pick): Add an arg to insertVal to allow us to prevent builtin types from being ignored
+\e[33mf2a10b61e2a7\e[m HEAD@{656}: rebase (pick): New test for varargs functions
+\e[33md7f49ed443ab\e[m HEAD@{657}: rebase (pick): Add library dep
+\e[33mfd413193db44\e[m HEAD@{658}: rebase (pick): Parenthesize output for expranalyze so that pointer stuff being multiplied isn't confusing
+\e[33m88bb8ebe01fd\e[m HEAD@{659}: rebase (pick): Build as before dis
+\e[33m392cb8a9804a\e[m HEAD@{660}: rebase (pick): Add support for extern varargs methods & varargs method calls
+\e[33m89cb2de0eeac\e[m HEAD@{661}: rebase (pick): Add support for extern varargs methods & varargs method calls
+\e[33maad7190b6bea\e[m HEAD@{662}: rebase (pick): Fix a bug when compiling 'shl ubyte * %var, ubyte 2'
+\e[33mb5d668969e65\e[m HEAD@{663}: rebase (pick): Filter out noncore stuff
+\e[33m36123a777b5e\e[m HEAD@{664}: rebase (pick): Fixed a bug exposed when doing something like this: <program> -notanoption --help
+\e[33ma9622c681ad6\e[m HEAD@{665}: rebase (pick): Changed printValue() to print constant value if the value is a constant.
+\e[33mbb2db6c88f8a\e[m HEAD@{666}: rebase (pick): *** empty log message ***
+\e[33m8d83c40582cc\e[m HEAD@{667}: rebase (pick): Doh! Wrong Optional flag. :(
+\e[33ma6c90bf6ee4c\e[m HEAD@{668}: rebase (pick): Add a comment indicating that there is documentation of the library
+\e[33ma98afe4b0579\e[m HEAD@{669}: rebase (pick): Initial checking of some rough documentation for commandline library
+\e[33m48fca76a95a8\e[m HEAD@{670}: rebase (pick): Change option name slightly
+\e[33mf62a2f2be6a9\e[m HEAD@{671}: rebase (pick): Minor changes to implementation of CommandLine library to let users override
+\e[33m6c74f799d80b\e[m HEAD@{672}: rebase (pick): Add a missing </a> tag
+\e[33m026bec7cf715\e[m HEAD@{673}: rebase (pick): Use the new Alias command line option
+\e[33md2ec898cfb0e\e[m HEAD@{674}: rebase (pick): CommandLine library cleanup. No longer use getValue/setValue, instead, just treat the commandline
+\e[33mf74319d29b56\e[m HEAD@{675}: rebase (pick): Doh! Wrong accessor. Caused 'can not read bytecode' errors. :(
+\e[33m104c6f0c01f6\e[m HEAD@{676}: rebase (pick): -help is verbose enough that we don't need this anymore
+\e[33mb0dcda34759b\e[m HEAD@{677}: rebase (pick): Eliminated the Unique class in favor of NonCopyable and NonCopyableV
+\e[33mec8abea1c777\e[m HEAD@{678}: rebase (pick): Moved inline/llvm/Tools/* to include/llvm/Support/*
+\e[33mf434f8970fdd\e[m HEAD@{679}: rebase (pick): Initial checkin
+\e[33mbd177131a770\e[m HEAD@{680}: rebase (pick): Fix coding style issues to actually attempt to be somewhat uniform
+\e[33mf4c632fabc9b\e[m HEAD@{681}: rebase (pick): Nonpolymorphic class, doesn't need a virtual dtor!
+\e[33m7bc807e14176\e[m HEAD@{682}: rebase (pick): Clean up hash table usage
+\e[33mefe8c7aa1cf0\e[m HEAD@{683}: rebase (pick): Removal of the redundant CompileContext wrapper
+\e[33mb099c14cc8ba\e[m HEAD@{684}: rebase (pick): Verbosify descriptions
+\e[33mb72d002be10f\e[m HEAD@{685}: rebase (pick): Large scale changes to implement new command line argument facility
+\e[33m23381cd5b5a1\e[m HEAD@{686}: rebase (pick): Remove dependence on command line library. Silly anyway.
+\e[33m4ee192c0ff7a\e[m HEAD@{687}: rebase (pick): Make it pickier
+\e[33m442f68038647\e[m HEAD@{688}: rebase (pick): Add flag for emacs so it realizes it's C++ code
+\e[33m99c4af7c6b12\e[m HEAD@{689}: rebase (pick): New test case
+\e[33m01ef66c762bb\e[m HEAD@{690}: rebase (pick): Privatize LLCOptions. It had no business being visible to the entire
+\e[33mb18d26deb43d\e[m HEAD@{691}: rebase (pick): Move private header into private directory
+\e[33m57cb798a4677\e[m HEAD@{692}: rebase (pick): Convert from using C style char*'s to strings.
+\e[33m144db6c30c7a\e[m HEAD@{693}: rebase (pick): Remove String file some more
+\e[33m78fc43ff73cb\e[m HEAD@{694}: rebase (pick): Remove stringutils.h file
+\e[33m3b9829cf7645\e[m HEAD@{695}: rebase (pick): Destroy the StringUtils.h file
+\e[33ma1f7c42bcb01\e[m HEAD@{696}: rebase (pick): Eliminate lots of unnecessary #includes and forward decls
+\e[33mf5e75c7e705d\e[m HEAD@{697}: rebase (pick): Eliminate many unneccesary #includes
+\e[33m1aa17f3bb25c\e[m HEAD@{698}: rebase (pick): Make code fit in 80 columns more
+\e[33mb95c07e35c7f\e[m HEAD@{699}: rebase (pick): Remove unneccesary #includes
+\e[33m5381f682dd30\e[m HEAD@{700}: rebase (pick): Exterminate nasty Cisms
+\e[33m11f554634433\e[m HEAD@{701}: rebase (pick): Refer to include/llvm/CodeGen not Codegen
+\e[33md2e18d70c558\e[m HEAD@{702}: rebase (pick): Instructions for use
+\e[33m34e368c59b5b\e[m HEAD@{703}: rebase (pick): Make sure we build all of the code!
+\e[33mf0d858ed34f1\e[m HEAD@{704}: rebase (pick): Renamed include/llvm/Codegen to include/llvm/CodeGen
+\e[33m6c8ccac2de98\e[m HEAD@{705}: rebase (pick): Fix code to be in a consistent style
+\e[33mc267a7d71c7b\e[m HEAD@{706}: rebase (pick): More minor reorganizations
+\e[33m51777d7f1b52\e[m HEAD@{707}: rebase (pick): Remove getTempValuesForMachineCode from the Instruction interface
+\e[33m21be61506817\e[m HEAD@{708}: rebase (pick): Filter out the sparc.burm.c file
+\e[33mef91903bfcbf\e[m HEAD@{709}: rebase (pick): Moved LLC subdir to the tools top level directory
+\e[33m0e90eb4b6eb7\e[m HEAD@{710}: rebase (pick): Make the makefile work
+\e[33m345e38ed07ac\e[m HEAD@{711}: rebase (pick): Add new ctor for ConstPoolBool
+\e[33m9d9614205cf1\e[m HEAD@{712}: rebase (pick): Add new constructor for const pool bool
+\e[33m363bdd9a0676\e[m HEAD@{713}: rebase (pick): Add support for casts
+\e[33m7fd6dcb064ef\e[m HEAD@{714}: rebase (pick): Add support for casting operators
+\e[33m61f218f640e2\e[m HEAD@{715}: rebase (pick): Support changed expression api
+\e[33m0d64b2ba0a9c\e[m HEAD@{716}: rebase (pick): More functionality, renamed API
+\e[33mdf5dbc8e3949\e[m HEAD@{717}: rebase (pick): Moved isIntegral to the Type system
+\e[33ma61ce81cc4d8\e[m HEAD@{718}: rebase (pick): Autodep functionality broken. Remove so we get successful builds
+\e[33m148b96074cee\e[m HEAD@{719}: rebase (pick): Version of testmemory to test alloca, load and store.
+\e[33m5153d313b0ce\e[m HEAD@{720}: rebase (pick): Used a bigger constant in loopfunc.ll that doesn't fit in immed field.
+\e[33m36eb43e26456\e[m HEAD@{721}: rebase (pick): Utility routines for simpler access to the value of an integer constant.
+\e[33me31cf51c03a4\e[m HEAD@{722}: rebase (pick): Program options class.
+\e[33m2339d0cf578d\e[m HEAD@{723}: rebase (pick): Driver and options for the llc compiler.
+\e[33m03cdc0b1bceb\e[m HEAD@{724}: rebase (pick): Description of the SPARC as a target architecture.
+\e[33mdd4b4355c99d\e[m HEAD@{725}: rebase (pick): Base clas for a description of a target architecture.
+\e[33m8a2e2fbd50e6\e[m HEAD@{726}: rebase (pick): Instruction selection via pattern matching on instruction trees using BURG.
+\e[33mfea7ff57c801\e[m HEAD@{727}: rebase (pick): *** empty log message ***
+\e[33mfae069f4e36b\e[m HEAD@{728}: rebase (pick): Added CodeGen, LLC, and Support.
+\e[33m24812650a87f\e[m HEAD@{729}: rebase (pick): General support utilities like a program options class and a StringMap
+\e[33m7c52e8197cf9\e[m HEAD@{730}: rebase (pick): CompileContext and options class for the llc compiler.
+\e[33maed61d90db66\e[m HEAD@{731}: rebase (pick): Header files for the target architecture description and for instruction
+\e[33m82015f75875f\e[m HEAD@{732}: rebase (pick): Added support for getting the dependence of an executable on its libs,
+\e[33m70d2dc737e0b\e[m HEAD@{733}: rebase (pick): Add isIntegral() method to SignedIntType and UnsignedIntType.
+\e[33mc7371d8afb38\e[m HEAD@{734}: rebase (pick): Provide simpler ways to extract the value of an integer constant.
+\e[33m15e79bcb6e4b\e[m HEAD@{735}: rebase (pick): Compute and cache information about the storage size and layout
+\e[33m6b94be0fa4af\e[m HEAD@{736}: rebase (pick): Provide uniform access to the pointer operand and to the index
+\e[33m2010845c92f1\e[m HEAD@{737}: rebase (pick): Added a representation of the machine instructions generated
+\e[33m213160e0bb9f\e[m HEAD@{738}: rebase (pick): Start of expression analysis support
+\e[33m9250c349b550\e[m HEAD@{739}: rebase (pick): Header to raise and lower representation
+\e[33m56dbc9359f2b\e[m HEAD@{740}: rebase (pick): Add support to call LevelRaise
+\e[33m6ffd08afd81c\e[m HEAD@{741}: rebase (pick): Update makefile for more accurate deps
+\e[33mf2df47febf1b\e[m HEAD@{742}: rebase (pick): Implement ensureTypeAvailable
+\e[33me06171c5109f\e[m HEAD@{743}: rebase (pick): Add support for constant propogation of multiplies
+\e[33mec9be9e818a5\e[m HEAD@{744}: rebase (pick): Factor out WriteAsOperand.
+\e[33m4bef44e0adfc\e[m HEAD@{745}: rebase (pick): Add a comment.
+\e[33mf012589e78ed\e[m HEAD@{746}: rebase (pick): Add multiply as a supported constant propogation operation
+\e[33m643641cb450c\e[m HEAD@{747}: rebase (pick): New function: WriteAsOperand.
+\e[33m80470d72e903\e[m HEAD@{748}: rebase (pick): Add new base class ConstPoolInt, useful for dealing with integral constants
+\e[33m7a5ca318dfe7\e[m HEAD@{749}: rebase (pick): Add new method, ensureTypeAvailable
+\e[33m9abf2d95c339\e[m HEAD@{750}: rebase (pick): Change is*Type to be a casting convertion operator
+\e[33ma7a79aafa026\e[m HEAD@{751}: rebase (pick): Add an function to BinaryOperator to swap the two operands
+\e[33mf8bb46fb137c\e[m HEAD@{752}: rebase (pick): Add short forms of the get*Type methods.
+\e[33m9dbc6bb6b44d\e[m HEAD@{753}: rebase (pick): Fix nasty typo
+\e[33md59d2aa4a97e\e[m HEAD@{754}: rebase (pick): Fix clean target
+\e[33mbf1c55b14525\e[m HEAD@{755}: rebase (pick): Compile source files in alphabetical order
+\e[33m02990b116ef2\e[m HEAD@{756}: rebase (pick): Fixed typo in comment
+\e[33mf5b88528d736\e[m HEAD@{757}: rebase (pick): Support external methods
+\e[33m643d6d93c309\e[m HEAD@{758}: rebase (pick): New test case for prototype support
+\e[33m12bb537e90da\e[m HEAD@{759}: rebase (pick): Reordered link line for correct static linking.
+\e[33m903f9efa3f84\e[m HEAD@{760}: rebase (pick): Changed default to building library archives instead of shared objects.
+\e[33maabc8315f101\e[m HEAD@{761}: rebase (pick): Implement forward/external declarations for methods.
+\e[33m64e2c4726aa8\e[m HEAD@{762}: rebase (pick): Implement forward/external declarations for methods. Also, emit an error if a method
+\e[33ma2be53991d96\e[m HEAD@{763}: rebase (pick): Rename 'isMethodExternal' to 'isExternal'
+\e[33maf58b501dadf\e[m HEAD@{764}: rebase (pick): Add notes on instruction selection pass
+\e[33m3be6a7da5434\e[m HEAD@{765}: rebase (pick): New testcase from GCC doing array operations
+\e[33m5702913064a2\e[m HEAD@{766}: rebase (pick): Add support for assembly printing fp constants
+\e[33m05c8093e0529\e[m HEAD@{767}: rebase (pick): Add support to the bytecode writer to recognize floating point constants
+\e[33m55f91192bf7c\e[m HEAD@{768}: rebase (pick): Add support to the bytecode reader to recognize floating point constants
+\e[33m828ae092b096\e[m HEAD@{769}: rebase (pick): Add support to the parser to recognize floating point constants
+\e[33m9d78fb9b25fa\e[m HEAD@{770}: rebase (pick): Add a function to convert a double to a string
+\e[33md25973d16cd9\e[m HEAD@{771}: rebase (pick): Add support to write and read a fixed amount of raw data
+\e[33mc35d12757fd4\e[m HEAD@{772}: rebase (pick): Add a note
+\e[33m94c6d03b6c82\e[m HEAD@{773}: rebase (pick): * ValueHolder now takes 3 arguments
+\e[33m67b11a5bd739\e[m HEAD@{774}: rebase (pick): Add knowledge about the struct form of the GetElementPtr instruction
+\e[33m06adb0b2ab08\e[m HEAD@{775}: rebase (pick): Remove dependency on the structure of ValueHolder.
+\e[33m0559fb6b55e4\e[m HEAD@{776}: rebase (pick): * The parent of a constant pool is a symtabvalue, not a value.
+\e[33mfb6d8d18898e\e[m HEAD@{777}: rebase (pick): The parent of a constant pool is a symtabvalue, not a value.
+\e[33mc20531f12219\e[m HEAD@{778}: rebase (pick): Added some comments, preparing to add global variables and method prototypes
+\e[33m39fae71357a5\e[m HEAD@{779}: rebase (pick): * The parent of a constant pool is a SymTabValue, not a value.
+\e[33me3812fad3a2d\e[m HEAD@{780}: rebase (pick): Made the following changes:
+\e[33mc6df40cee22e\e[m HEAD@{781}: rebase (pick): Added more todo's. Don't I ever accomplish anything?
+\e[33m6ee823f32e3d\e[m HEAD@{782}: rebase (pick): Add DebugValue member.
+\e[33mc8281fb7bdfe\e[m HEAD@{783}: rebase (pick): Made it not inline
+\e[33me0c85017da0a\e[m HEAD@{784}: rebase (pick): Add DebugValue global function
+\e[33ma93311112bbc\e[m HEAD@{785}: rebase (pick): Don't clean out the type plane of the constant pool... this is a hack. FIXME
+\e[33m97add160370e\e[m HEAD@{786}: rebase (pick): Make sure that types go in the constant pool if they are used.
+\e[33m3f0bab207223\e[m HEAD@{787}: rebase (pick): hasSideEffects should be marked virtual
+\e[33m08fc7cf1be14\e[m HEAD@{788}: rebase (pick): Modify notes
+\e[33m96f249a20298\e[m HEAD@{789}: rebase (pick): Fix stupid typo
+\e[33mc874f2e554d5\e[m HEAD@{790}: rebase (pick): Initial checkin of coding standards
+\e[33mc0abd659a4e3\e[m HEAD@{791}: rebase (pick): Updated documentation for load, store & getelementptr
+\e[33m8ff1023c5729\e[m HEAD@{792}: rebase (pick): add coverage of newly implemented instructions.
+\e[33m87ad59d49e91\e[m HEAD@{793}: rebase (pick): Implementation of Store & GetElementPtr
+\e[33m2b2b55bdec44\e[m HEAD@{794}: rebase (pick): Implement checking for new instructions
+\e[33m4fb6aa4a9e7a\e[m HEAD@{795}: rebase (pick): Add note
+\e[33me9d048cd6792\e[m HEAD@{796}: rebase (pick): Implemented shl, shl, & load instructions
+\e[33m5833b72ec4b1\e[m HEAD@{797}: rebase (pick): Moved Cast from being a Unary instruction to being an "Other" instruction
+\e[33m6b062514ff40\e[m HEAD@{798}: rebase (pick): Use the CDG to mark branches alive on demand.
+\e[33m3005d00fa8dd\e[m HEAD@{799}: rebase (pick): Add a new "addOperand" method to User.
+\e[33m4cb53fdaeffb\e[m HEAD@{800}: rebase (pick): Fixed post dominator frontiers! Yaay!
+\e[33maa86a73a5bec\e[m HEAD@{801}: rebase (pick): Neg instruction removed. Cast instruction implemented.
+\e[33m842d6e099476\e[m HEAD@{802}: rebase (pick): Neg instruction removed. TODO item fulfilled.
+\e[33m7550203543d2\e[m HEAD@{803}: rebase (pick): Removing unnecesary file
+\e[33m6c99b25c3bd8\e[m HEAD@{804}: rebase (pick): Convert BinaryOperand and UnaryOperator to only take instruction types of
+\e[33meea771ae35ce\e[m HEAD@{805}: rebase (pick): Broad superficial changes:
+\e[33m8b0f42aa64c1\e[m HEAD@{806}: rebase (pick): Devirtualize User::dropAllReferences
+\e[33mb6af5d386268\e[m HEAD@{807}: rebase (pick): Remove dtor's that simply call dropAllReferences
+\e[33m70707b9adf64\e[m HEAD@{808}: rebase (pick): Changed the fundemental architecture of Operands for Instructions. Now
+\e[33mbc4bfa70b8e0\e[m HEAD@{809}: rebase (pick): Changed memory reference instructions to store the result as the implicit
+\e[33mdd91a3d2d9e7\e[m HEAD@{810}: rebase (pick): Fixed some error messages to be nicer
+\e[33m7f723d15a495\e[m HEAD@{811}: rebase (pick): Add note about nuking Instruction::neg
+\e[33ma75385aa3c2e\e[m HEAD@{812}: rebase (pick): Initial checkin
+\e[33m93634e0499a7\e[m HEAD@{813}: rebase (pick): Add better support for post dominator information.
+\e[33m0528ba902343\e[m HEAD@{814}: rebase (pick): Add method to unify all exit nodes of a method
+\e[33m947db1d96a4f\e[m HEAD@{815}: rebase (pick): Implement support for postdominators, except in dom frontiers
+\e[33ma534bd635e5e\e[m HEAD@{816}: rebase (pick): New file, includes method to merge exit nodes together
+\e[33m9996c4da5186\e[m HEAD@{817}: rebase (pick): * Add a DominatorBase base class to maintain root of Dominator info
+\e[33m042a9c01050d\e[m HEAD@{818}: rebase (pick): * Added comments
+\e[33mb30075f1d1b2\e[m HEAD@{819}: rebase (pick): Update to include right file
+\e[33mb655a756d6a9\e[m HEAD@{820}: rebase (pick): Initial checkin of analyze tool.
+\e[33m2c1174ab6df2\e[m HEAD@{821}: rebase (pick): Build new analyze tool
+\e[33m8350bbd20ae5\e[m HEAD@{822}: rebase (pick): Added analyze to path for SetupOpt script
+\e[33mc705cdc36c17\e[m HEAD@{823}: rebase (pick): Add analyze tool to path for Setup script
+\e[33mb18d4fae85b6\e[m HEAD@{824}: rebase (pick): IntervalPartition was changed to inherit from vector<Interval*> instead of
+\e[33m743ecc7f0095\e[m HEAD@{825}: rebase (pick): IntervalPartition was changed to inherit from vector<Interval*> instead of
+\e[33mf95290eba1c4\e[m HEAD@{826}: rebase (pick): *** empty log message ***
+\e[33m39b38db21649\e[m HEAD@{827}: rebase (pick): Checkin of new Analysis result printing header
+\e[33mc16998cb96e5\e[m HEAD@{828}: rebase (pick): Code got moved from the lib/Assembly/Writer/IntervalWriter.cpp file to
+\e[33m49090bf698f5\e[m HEAD@{829}: rebase (pick): Remove code for printing out Analysis data structures. It got moved
+\e[33m2149e63cb883\e[m HEAD@{830}: rebase (pick): Update documentation a bit, correct #include guard
+\e[33mb048f8d4a4b3\e[m HEAD@{831}: rebase (pick): Add note about tool idea. Change command line of note to be more specific
+\e[33m62e192f9ef8f\e[m HEAD@{832}: rebase (pick): Add printing code for dominator info
+\e[33m5630a5fac34d\e[m HEAD@{833}: rebase (pick): Checkin of new dominator calculation routines. These will be improved in
+\e[33mee98cbc6c810\e[m HEAD@{834}: rebase (pick): Enable printing of dominator related information.
+\e[33m889fa47ccf94\e[m HEAD@{835}: rebase (pick): Add new anaysis routines for building dominator related information
+\e[33m98e49f4ca414\e[m HEAD@{836}: rebase (pick): Addition of 'deleter' function.
+\e[33mbac6bb0ae065\e[m HEAD@{837}: rebase (pick): Moved deleter to include/llvm/Tools/STLExtras.h
+\e[33mde19f162cc14\e[m HEAD@{838}: rebase (pick): Initial checkin. Should print dead instructions, except it doesn't do
+\e[33m4fb09389a03b\e[m HEAD@{839}: rebase (pick): Include ADCE pass, rename include/Opt directory to llvm/Optimizations
+\e[33md56c334ebb78\e[m HEAD@{840}: rebase (pick): Rename DoSparseConditionalConstantProp -> DoSCCP
+\e[33md8c1f57237a1\e[m HEAD@{841}: rebase (pick): Add note
+\e[33mc355930e34c8\e[m HEAD@{842}: rebase (pick): Add prototypes for ADCE pass
+\e[33ma9aaeed69342\e[m HEAD@{843}: rebase (pick): Rename DoSparseConditionalConstantProp to DoSCCP
+\e[33m82abf7e9b6fa\e[m HEAD@{844}: rebase (pick): Optimizations got their own header files
+\e[33mc49280c35c8a\e[m HEAD@{845}: rebase (pick): Implement reduceApply method
+\e[33m512b32b42708\e[m HEAD@{846}: rebase (pick): Add a new pop_back() method
+\e[33mc2d246ce3e77\e[m HEAD@{847}: rebase (pick): The ConstRules class got moved to the opt namespace
+\e[33m6167d0001fe5\e[m HEAD@{848}: rebase (pick): Add a reduceApply method
+\e[33md78e27809d32\e[m HEAD@{849}: rebase (pick): Split AllOpts.h into lots of little .h files.
+\e[33m0963fce4a854\e[m HEAD@{850}: rebase (pick): Export ConstantFoldTerminator, allow it to fold conditional branches to
+\e[33m849231387470\e[m HEAD@{851}: rebase (pick): Added documentation. Constant fold terminators.
+\e[33m6ff2d0ae85ce\e[m HEAD@{852}: rebase (pick): Added prototype for ConstantFoldTerminator
+\e[33m6fe27ce22949\e[m HEAD@{853}: rebase (pick): Add a check to avoid allowing V->replaceAllUsesWith(V)
+\e[33m3f6c78a176e1\e[m HEAD@{854}: rebase (pick): Add implementation of BasicBlock::removePredecessor code that was factored
+\e[33mba8f2c1f6a6f\e[m HEAD@{855}: rebase (pick): * Factored RemovePredecessorFromBlock into BasicBlock::removePredecessor
+\e[33mb0e4bdf5d6d0\e[m HEAD@{856}: rebase (pick): We need to make sure to remove PHI nodes in the successor that cannot be
+\e[33mca8d6d3dd907\e[m HEAD@{857}: rebase (pick): Added a note about a new verification the verifier should do
+\e[33m0686d990fbf0\e[m HEAD@{858}: rebase (pick): Added new removePredecessor method prototype
+\e[33m8930ec2756c1\e[m HEAD@{859}: rebase (pick): Added note, moved note
+\e[33m6109478c092c\e[m HEAD@{860}: rebase (pick): Fixed the obnoxious problem that caused an entire directory to rebuild
+\e[33mf2eab63950b5\e[m HEAD@{861}: rebase (pick): Miscellaneous cleanups:
+\e[33m63286b72d223\e[m HEAD@{862}: rebase (pick): Add a new Sparse Conditional Constant Propogation pass
+\e[33m324c5dcc9d82\e[m HEAD@{863}: rebase (pick): Add command line arguments for Constant Pool Merging & Sparse Conditional Constant Prop
+\e[33mb412bc074f36\e[m HEAD@{864}: rebase (pick): Put in test of SCCP. Watch out though, because we need to sort the
+\e[33mb4bb71fd0f0d\e[m HEAD@{865}: rebase (pick): Change to use the new GenericBinaryInst class. Support lots more operators.
+\e[33mb00b3f2b682d\e[m HEAD@{866}: rebase (pick): Misc cleanup
+\e[33m540c4ae24c8e\e[m HEAD@{867}: rebase (pick): * Expose DoConstantPoolMerging
+\e[33m955a4d740cb4\e[m HEAD@{868}: rebase (pick): Convert ugly postincrement to efficient preincrement
+\e[33m1dacaa7057bf\e[m HEAD@{869}: rebase (pick): * Move stuff around a bit.
+\e[33m926791f1ca54\e[m HEAD@{870}: rebase (pick): Add instructions to fold unary and binary instructions.
+\e[33m77090a9ae8e4\e[m HEAD@{871}: rebase (pick): * Use the new reduce_apply_bool template
+\e[33md564849afb96\e[m HEAD@{872}: rebase (pick): getBasicBlocks() is not needed anymore for reading Method data
+\e[33mc9c6da3ca1f7\e[m HEAD@{873}: rebase (pick): Added methods to make dealing with switches and branch instructions
+\e[33m5b8794782e8c\e[m HEAD@{874}: rebase (pick): Minor formating changes
+\e[33m259afbe701de\e[m HEAD@{875}: rebase (pick): Make a new GenericBinaryInst class, instead of providing lots of silly
+\e[33mf26fbe244a3c\e[m HEAD@{876}: rebase (pick): Convert postincrements to more efficient preincrements
+\e[33ma685acebd652\e[m HEAD@{877}: rebase (pick): Add a new slew of functions to allow dynamic_cast<> like operation for
+\e[33m49e5848f7266\e[m HEAD@{878}: rebase (pick): Add extra forwarding accessor methods so that getMethodList(), getBasicBlocks()
+\e[33m41a60e4b2e4f\e[m HEAD@{879}: rebase (pick): Add more notes
+\e[33m0f81680a2104\e[m HEAD@{880}: rebase (pick): Filter out some more stuff
+\e[33m0bf0d89d693b\e[m HEAD@{881}: rebase (pick): Moved UnaryOperator::create to InstrTypes.cpp until there is an iUnaryOps.cpp
+\e[33m4d5a89c84cd7\e[m HEAD@{882}: rebase (pick): Implement induction variable injection!
+\e[33mc463b997b86a\e[m HEAD@{883}: rebase (pick): Renamed get.*Operator to create seeing that it would have to be qualified
+\e[33mef4669a3e67b\e[m HEAD@{884}: rebase (pick): * Rename get.*Operator to create seeing that it would have to be qualified
+\e[33me51131d287ae\e[m HEAD@{885}: rebase (pick): A silly stupid test of the loop depth calculator was added. REMOVE in the
+\e[33md06ca69a78ce\e[m HEAD@{886}: rebase (pick): IntervalPartition: recode to use IntervalIterator to do all the work
+\e[33md2fd00e218cb\e[m HEAD@{887}: rebase (pick): Add a helper function bind_obj
+\e[33m7fc109749907\e[m HEAD@{888}: rebase (pick): Big changes. Interval*.h is now more or less finalized. IntervalPartition
+\e[33m5848055f471b\e[m HEAD@{889}: rebase (pick): CFG.h: change the iterator tag
+\e[33mc1eafb1d07ab\e[m HEAD@{890}: rebase (pick): ValueHolder's aren't interseting to me anymore
+\e[33mb1abed97808e\e[m HEAD@{891}: rebase (pick): New file due to the Intervals.h splitup
+\e[33m0724b3e90091\e[m HEAD@{892}: rebase (pick): New files due to the Intervals.h splitup
+\e[33mba91baa363b7\e[m HEAD@{893}: rebase (pick): Add a useless phi for testing with InductionVariables stuff
+\e[33mf916541417e3\e[m HEAD@{894}: rebase (pick): #include a different header due to Intervals.h splitting up
+\e[33m5329f8f73c86\e[m HEAD@{895}: rebase (pick): IntervalPartition & IntervalIterator classes have been split out into
+\e[33mfbea208252f0\e[m HEAD@{896}: rebase (pick): IntervalPartition & IntervalIterator classes have been split out into
+\e[33md828c7706db9\e[m HEAD@{897}: rebase (pick): Prepare for split between Interval, IntervalIterator, and IntervalIPartition
+\e[33m3b3d00dffb19\e[m HEAD@{898}: rebase (pick): Addition of IntervalIterator. Preparing for rename of Intervals.h to
+\e[33mf948fd9866ee\e[m HEAD@{899}: rebase (pick): Added notes
+\e[33md41887123b2e\e[m HEAD@{900}: rebase (pick): Implement a lot more functionality. Now loop invariant and linear
+\e[33md9b7e634b62b\e[m HEAD@{901}: rebase (pick): Interval::HeaderNode is now accessed thorugh an accessor function
+\e[33m32f9e9270229\e[m HEAD@{902}: rebase (pick): Add comments
+\e[33ma3eb9281f099\e[m HEAD@{903}: rebase (pick): Add accessor methods to binary/unary operators
+\e[33mb03e9bf9c388\e[m HEAD@{904}: rebase (pick): Add a space to the PHI node output code to make it look nicer
+\e[33m605e752f0429\e[m HEAD@{905}: rebase (pick): Moved printing code to the Assembly/Writer library.
+\e[33m8d6f5b857ebb\e[m HEAD@{906}: rebase (pick): Implement the new Interval::isLoop method
+\e[33mbc792603f8b8\e[m HEAD@{907}: rebase (pick): New header file defined with neeto utilities put in one place
+\e[33m3b59035da7ea\e[m HEAD@{908}: rebase (pick): Modified to use the new reduce_apply algorithm
+\e[33m58967efc5647\e[m HEAD@{909}: rebase (pick): * Added capability to print out an interval
+\e[33m0246e25d77a6\e[m HEAD@{910}: rebase (pick): * Added comments
+\e[33mf88d93ea7fac\e[m HEAD@{911}: rebase (pick): Add a test case: an irreducible flow graph.
+\e[33md9d7c6d1179e\e[m HEAD@{912}: rebase (pick): Get rid of a silly printout that isn't needed right now
+\e[33m667d489ab2c9\e[m HEAD@{913}: rebase (pick): Add note
+\e[33m7d9fb3ab2fe8\e[m HEAD@{914}: rebase (pick): New test case
+\e[33m6cdff3cad3c3\e[m HEAD@{915}: rebase (pick): Add capability to print a derived interval graph
+\e[33m7ac17927b805\e[m HEAD@{916}: rebase (pick): Add capability to build a derived interval graph
+\e[33m56e38307935f\e[m HEAD@{917}: rebase (pick): Factor the predeclarations of the CFG.h functionality into a seperate, new header
+\e[33mea614fef124f\e[m HEAD@{918}: rebase (pick): Initial Checking of Interval handling code
+\e[33m644acdbfe034\e[m HEAD@{919}: rebase (pick): Add stub for induction variable code
+\e[33m0a9fdd55c1ca\e[m HEAD@{920}: rebase (pick): Add a more complex test case
+\e[33m92e26fb33e21\e[m HEAD@{921}: rebase (pick): Add a test case for interval code
+\e[33m5a4847e078a6\e[m HEAD@{922}: rebase (pick): Add an optimization stub
+\e[33m423d0a2d3762\e[m HEAD@{923}: rebase (pick): New file: Interval analysis support
+\e[33mf0e51696b0f1\e[m HEAD@{924}: rebase (pick): Add a note
+\e[33m7b1bb4951dbd\e[m HEAD@{925}: rebase (pick): Filter out more stuff I don't want all the time
+\e[33mdf4258024997\e[m HEAD@{926}: rebase (pick): Removed silly test code
+\e[33m118b768314e8\e[m HEAD@{927}: rebase (pick): Added options to print out basic blocks in a variety of different orderings
+\e[33ma925ae543736\e[m HEAD@{928}: rebase (pick): Updates to work with new cfg namespace
+\e[33m0b9af59e24ef\e[m HEAD@{929}: rebase (pick): Implement support for writing VCG format output
+\e[33m388ad96269af\e[m HEAD@{930}: rebase (pick): Move contents to the cfg namespace.
+\e[33m91078f85b47e\e[m HEAD@{931}: rebase (pick): Updates to support
+\e[33mfba16076cade\e[m HEAD@{932}: rebase (pick): Updates to support
+\e[33mfc5655471d3e\e[m HEAD@{933}: rebase (pick): Updates to support
+\e[33m0a9d874b1031\e[m HEAD@{934}: rebase (pick): Updates to support
+\e[33mbcb3231d6613\e[m HEAD@{935}: rebase (pick): Update documentation to reflect:
+\e[33mdb7f6e6d79ea\e[m HEAD@{936}: rebase (pick): Moved getBinaryOperator to the BinaryOperator class and the getUnaryOperator
+\e[33m2cf6ee5926fe\e[m HEAD@{937}: rebase (pick): I actually got something done
+\e[33m783091c4f5c6\e[m HEAD@{938}: rebase (pick): Beautify the source a bit.
+\e[33m94ea386b0c0c\e[m HEAD@{939}: rebase (pick): Include support for reverse iteration.
+\e[33m059def0ab975\e[m HEAD@{940}: rebase (pick): Added a stupid testcase for iterators.
+\e[33mbe3f7a5b9a7a\e[m HEAD@{941}: rebase (pick): Added reverse depth first capability, fixed depth first capability
+\e[33m5b0379941c62\e[m HEAD@{942}: rebase (pick): Updated to work with new CFG.h file.
+\e[33m015520037831\e[m HEAD@{943}: rebase (pick): Moved iterators to the new CFG.h file.
+\e[33mb77ecaef3f49\e[m HEAD@{944}: rebase (pick): New file
+\e[33m2208b443367c\e[m HEAD@{945}: rebase (pick): inlining can change methods a second time, so don't rerun inliner when testing for
+\e[33md7ec7d53b0c1\e[m HEAD@{946}: rebase (pick): Add extra method to PHI node class
+\e[33m94a07501c89d\e[m HEAD@{947}: rebase (pick): Significant rework. DCE is still not done (see #ifdef'd out parts)
+\e[33m110f15739545\e[m HEAD@{948}: rebase (pick): Fixed to print slightly differently. Added use counts for labels
+\e[33madd1ace044cd\e[m HEAD@{949}: rebase (pick): Fixes for BB iterators, additional methods added for DCE pass
+\e[33m8a8e91d33707\e[m HEAD@{950}: rebase (pick): Extra comments
+\e[33m3bdcc96804e9\e[m HEAD@{951}: rebase (pick): Now does not include instruction files...
+\e[33mc6325331663d\e[m HEAD@{952}: rebase (pick): Initial revision
+\e[33mf3f54944c027\e[m HEAD@{953}: rebase (pick): New repository initialized by cvs2svn.
+\e[33m8b754e2f7567\e[m\e[33m (\e[m\e[1;31morigin/master\e[m\e[33m, \e[m\e[1;31mfork/master\e[m\e[33m)\e[m HEAD@{954}: rebase (start): checkout origin/master
+\e[33m1dc8f4774d34\e[m HEAD@{955}: checkout: moving from main to arraytype
+\e[33m72ea6fbc150a\e[m HEAD@{956}: checkout: moving from recoverreturn to main
+\e[33m549498c110fa\e[m\e[33m (\e[m\e[1;32mrecoverreturn\e[m\e[33m)\e[m HEAD@{957}: commit (amend): [AST] Produce ReturnStmt containing RecoveryExpr when type is wrong
+\e[33m500ba6619cf3\e[m HEAD@{958}: commit (amend): [AST] Produce ReturnStmt containing RecoveryExpr when type is wrong
+\e[33m256e9d00f6a8\e[m HEAD@{959}: commit (amend): [AST] Produce ReturnStmt containing RecoveryExpr when type is wrong
+\e[33m056fc2e74960\e[m HEAD@{960}: commit (amend): [AST] Produce ReturnStmt containing RecoveryExpr when type is wrong
+\e[33md537c309a9d4\e[m HEAD@{961}: commit: [AST] Produce ReturnStmt containing RecoveryExpr when type is wrong
+\e[33m72ea6fbc150a\e[m HEAD@{962}: checkout: moving from main to recoverreturn
+\e[33m72ea6fbc150a\e[m HEAD@{963}: rebase (finish): returning to refs/heads/main
+\e[33m72ea6fbc150a\e[m HEAD@{964}: rebase (start): checkout origin/main
+\e[33m9dc4af327b12\e[m HEAD@{965}: checkout: moving from two to main
+\e[33m8062dae7812f\e[m\e[33m (\e[m\e[1;32mtwo\e[m\e[33m)\e[m HEAD@{966}: commit (amend): [Parse] Use empty RecoveryExpr when if/while/do/switch conditions fail to parse
+\e[33mc5ce4cbfc3cd\e[m HEAD@{967}: rebase (finish): returning to refs/heads/two
+\e[33mc5ce4cbfc3cd\e[m HEAD@{968}: rebase (pick): [Parse] Use empty RecoveryExpr when if/while/do/switch conditions fail to parse
+\e[33m72ea6fbc150a\e[m HEAD@{969}: rebase (start): checkout origin/main
+\e[33mc56122daac76\e[m HEAD@{970}: checkout: moving from iwyustdlib to two
+\e[33mf038610fb5f3\e[m HEAD@{971}: commit (amend): [clangd] Basic IncludeCleaner support for c/c++ standard library
+\e[33me7f383b77f38\e[m HEAD@{972}: commit (amend): [clangd] Basic IncludeCleaner support for c/c++ standard library
+\e[33m23650256334a\e[m HEAD@{973}: commit (amend): [clangd] Basic IncludeCleaner support for c/c++ standard library
+\e[33meb1c9e6fabaa\e[m HEAD@{974}: rebase (continue) (finish): returning to refs/heads/iwyustdlib
+\e[33meb1c9e6fabaa\e[m HEAD@{975}: rebase (continue): [clangd] Basic IncludeCleaner support for c/c++ standard library
+\e[33m128c6ed73b8f\e[m HEAD@{976}: rebase (start): checkout origin/main
+\e[33m2f3a9575f9ad\e[m HEAD@{977}: checkout: moving from stdlib to iwyustdlib
+\e[33mcdfb640fe9e8\e[m\e[33m (\e[m\e[1;32mstdlib\e[m\e[33m)\e[m HEAD@{978}: checkout: moving from prettify to stdlib
+\e[33m77cc7d2fd845\e[m\e[33m (\e[m\e[1;32mprettify\e[m\e[33m)\e[m HEAD@{979}: commit (amend): [CodeCompletion][clangd] Clean __uglified parameter names in completion & hover
+\e[33m97d9713c55bc\e[m HEAD@{980}: commit (amend): [CodeCompletion][clangd] Clean __uglified parameter names in completion & hover
+\e[33m0e1e531ca3ab\e[m HEAD@{981}: commit (amend): [CodeCompletion][clangd] Clean __uglified parameter names in completion & hover
+\e[33m2dcf689f661e\e[m HEAD@{982}: commit (amend): [CodeCompletion][clangd] Clean __uglified parameter names in completion & hover
+\e[33m22e53b9a3b3f\e[m HEAD@{983}: commit: [CodeCompletion][clangd] Clean __uglified parameter names in completion & hover
+\e[33m9dc4af327b12\e[m HEAD@{984}: checkout: moving from main to prettify
+\e[33m9dc4af327b12\e[m HEAD@{985}: reset: moving to HEAD
+\e[33m9dc4af327b12\e[m HEAD@{986}: reset: moving to HEAD
+\e[33m9dc4af327b12\e[m HEAD@{987}: checkout: moving from 9dc4af327b12dfbcf90fde1641cd649c6814bf98 to main
+\e[33m9dc4af327b12\e[m HEAD@{988}: checkout: moving from main to origin/main
+\e[33m2c644e2f71a5\e[m HEAD@{989}: commit: FFix feature name in 9dc4af327b12dfbcf90fde1641cd649c6814bf98
+\e[33m9dc4af327b12\e[m HEAD@{990}: rebase (finish): returning to refs/heads/main
+\e[33m9dc4af327b12\e[m HEAD@{991}: rebase (pick): Re-land "[clang] Add early exit when checking for const init of arrays."
+\e[33m4fedd4be385e\e[m HEAD@{992}: rebase (start): checkout origin/main
+\e[33ma3fd292fed18\e[m HEAD@{993}: commit (amend): Re-land "[clang] Add early exit when checking for const init of arrays."
+\e[33m70b8662a502c\e[m HEAD@{994}: commit (amend): Re-land "[clang] Add early exit when checking for const init of arrays."
+\e[33m2ff827ad7f2d\e[m HEAD@{995}: commit (amend): Re-land "[clang] Add early exit when checking for const init of arrays."
+\e[33m9ad5cbdb06d8\e[m HEAD@{996}: revert: Re-land "[clang] Add early exit when checking for const init of arrays."
+\e[33m6f1a501fddae\e[m HEAD@{997}: checkout: moving from tmplargs to main
+\e[33ma7b31d694812\e[m HEAD@{998}: commit (amend): [CodeCompletion] Signature help for template argument lists
+\e[33m2142ae80cf59\e[m HEAD@{999}: commit (amend): [CodeCompletion] Signature help for template argument lists
+\e[33m4669c22c0e70\e[m HEAD@{1000}: commit (amend): [CodeCompletion] Signature help for template argument lists
+\e[33m99217d405b2b\e[m HEAD@{1001}: commit (amend): [CodeCompletion] Signature help for template argument lists
+\e[33m86fa6ad9fb2b\e[m HEAD@{1002}: commit (amend): [CodeCompletion] Signature help for template argument lists
+\e[33m0a7d62a75abf\e[m HEAD@{1003}: commit (amend): [CodeCompletion] Signature help for template argument lists
+\e[33m8b0170fa11c1\e[m HEAD@{1004}: commit: [CodeCompletion] Signature help for template argument lists
+\e[33m6f1a501fddae\e[m HEAD@{1005}: checkout: moving from main to tmplargs
+\e[33m6f1a501fddae\e[m HEAD@{1006}: reset: moving to HEAD
+\e[33m6f1a501fddae\e[m HEAD@{1007}: checkout: moving from aggregates to main
+\e[33m9cf82ca7e4ee\e[m HEAD@{1008}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33mc9f6b6b3f6a8\e[m HEAD@{1009}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33m7b37b2f933bd\e[m HEAD@{1010}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33me78f39a12189\e[m HEAD@{1011}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33m985a3b182774\e[m HEAD@{1012}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33ma7ab012a8ff1\e[m HEAD@{1013}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33m84c5ef8d6646\e[m HEAD@{1014}: commit (amend): [CodeCompletion] Signature help for aggregate initialization.
+\e[33m7e2d55fea796\e[m HEAD@{1015}: rebase (finish): returning to refs/heads/aggregates
+\e[33m7e2d55fea796\e[m HEAD@{1016}: rebase (pick): [CodeCompletion] Signature help for aggregate initialization.
+\e[33mb245d1eaec2d\e[m HEAD@{1017}: rebase (start): checkout bracehelp
+\e[33m6175a4ae0cfc\e[m HEAD@{1018}: checkout: moving from bracehelp to aggregates
+\e[33mb245d1eaec2d\e[m HEAD@{1019}: commit (amend): [CodeCompletion] Signature help for braced constructor calls
+\e[33mf648b926a983\e[m HEAD@{1020}: checkout: moving from aggregates to bracehelp
+\e[33m6175a4ae0cfc\e[m HEAD@{1021}: commit: [CodeCompletion] Signature help for aggregate initialization.
+\e[33mf648b926a983\e[m HEAD@{1022}: checkout: moving from bracehelp to aggregates
+\e[33mf648b926a983\e[m HEAD@{1023}: commit (amend): [CodeCompletion] Signature help for braced constructor calls
+\e[33md830368b01ba\e[m HEAD@{1024}: commit (amend): [CodeCompletion] Signature help for braced constructor calls
+\e[33m3fe02e425768\e[m HEAD@{1025}: commit (amend): [CodeCompletion] Signature help for braced constructor calls
+\e[33m3158a41d01e1\e[m HEAD@{1026}: commit (amend): [CodeCompletion] Signature help for braced constructor calls
+\e[33m8e451de571e7\e[m HEAD@{1027}: commit (amend): [CodeCompletion] Signature help for braced constructor calls
+\e[33mb35aa36a3e3f\e[m HEAD@{1028}: commit: [CodeCompletion] Signature help for braced constructor calls
+\e[33m6f1a501fddae\e[m HEAD@{1029}: checkout: moving from main to bracehelp
+\e[33m6f1a501fddae\e[m HEAD@{1030}: checkout: moving from completeinit to main
+\e[33m347a926ee355\e[m\e[33m (\e[m\e[1;32mcompleteinit\e[m\e[33m)\e[m HEAD@{1031}: commit (amend): [CodeCompletion] (mostly) fix completion in incomplete C++ ctor initializers.
+\e[33m9babb0590695\e[m HEAD@{1032}: commit (amend): [CodeCompletion] (mostly) fix completion in incomplete C++ ctor initializers.
+\e[33m91e9b7b90b4f\e[m HEAD@{1033}: commit (amend): [CodeCompletion] (mostly) fix completion in incomplete C++ ctor initializers.
+\e[33m0e1023621e0f\e[m HEAD@{1034}: commit: [CodeCompletion] (mostly) fix completion in incomplete C++ ctor initializers.
+\e[33m6f1a501fddae\e[m HEAD@{1035}: checkout: moving from main to completeinit
+\e[33m6f1a501fddae\e[m HEAD@{1036}: checkout: moving from configcompiler to main
+\e[33m0fa6fc0238fe\e[m HEAD@{1037}: commit (amend): [clangd] Add CompileFlags.Compiler option to override argv0
+\e[33m8205faff5871\e[m HEAD@{1038}: commit (amend): [clangd] Add CompileFlags.Compiler option to override argv0
+\e[33m27055788e902\e[m HEAD@{1039}: commit (amend): [clangd] Add CompileFlags.Compiler option to override argv0
+\e[33mf9bdd0229665\e[m HEAD@{1040}: commit: [clangd] Add CompileFlags.Compiler option to override argv0
+\e[33m6f1a501fddae\e[m HEAD@{1041}: checkout: moving from main to configcompiler
+\e[33m6f1a501fddae\e[m HEAD@{1042}: checkout: moving from manglefilename to main
+\e[33mb3f0e3eeccc0\e[m\e[33m (\e[m\e[1;32mmanglefilename\e[m\e[33m)\e[m HEAD@{1043}: commit (amend): [clangd] Adjust compile flags so they work when applied to other file(type)s.
+\e[33m22ea16ea69e9\e[m HEAD@{1044}: commit (amend): [clangd] Adjust compile flags so they work when applied to other file(type)s.
+\e[33m8325fd69d14a\e[m HEAD@{1045}: commit (amend): [clangd] Adjust compile flags so they work when applied to other file(type)s.
+\e[33m0b435ba816ae\e[m HEAD@{1046}: commit: [clangd] Adjust compile flags so they work when applied to other file(type)s.
+\e[33m6f1a501fddae\e[m HEAD@{1047}: checkout: moving from main to manglefilename
+\e[33m6f1a501fddae\e[m HEAD@{1048}: checkout: moving from tidydiags to main
+\e[33m53abaad295f4\e[m HEAD@{1049}: commit (amend): [clangd] Respect .clang-tidy ExtraArgs (-Wfoo only) when producing diagnostics
+\e[33m8daae4149924\e[m HEAD@{1050}: commit (amend): [clangd] Respect .clang-tidy ExtraArgs (-Wfoo only) when producing diagnostics
+\e[33m95f3d66f621b\e[m HEAD@{1051}: commit (amend): [clangd] Respect .clang-tidy ExtraArgs (-Wfoo only) when producing diagnostics
+\e[33m6e4e13e32e9a\e[m HEAD@{1052}: commit (amend): [clangd] Respect .clang-tidy ExtraArgs (-Wfoo only) when producing diagnostics
+\e[33mb80c98fe991c\e[m HEAD@{1053}: commit: [clangd] Respect .clang-tidy ExtraArgs (-Wfoo only) when producing diagnostics
+\e[33m6f1a501fddae\e[m HEAD@{1054}: checkout: moving from main to tidydiags
+\e[33m6f1a501fddae\e[m HEAD@{1055}: rebase (finish): returning to refs/heads/main
+\e[33m6f1a501fddae\e[m HEAD@{1056}: rebase (pick): [clangd] Fix typo in test. NFC
+\e[33mdfa2ad1ad858\e[m HEAD@{1057}: rebase (start): checkout origin/main
+\e[33me5cc3319d413\e[m HEAD@{1058}: rebase (finish): returning to refs/heads/main
+\e[33me5cc3319d413\e[m HEAD@{1059}: rebase (pick): [clangd] Fix typo in test. NFC
+\e[33me751d97863fb\e[m HEAD@{1060}: rebase (start): checkout origin/main
+\e[33mbe44f91f4fca\e[m HEAD@{1061}: commit: [clangd] Fix typo in test. NFC
+\e[33mc2f2bb066b83\e[m HEAD@{1062}: reset: moving to HEAD
+\e[33mc2f2bb066b83\e[m HEAD@{1063}: rebase (finish): returning to refs/heads/main
+\e[33mc2f2bb066b83\e[m HEAD@{1064}: rebase (start): checkout origin/main
+\e[33m62bcb75ce510\e[m HEAD@{1065}: checkout: moving from usingtype to main
+\e[33maf27466c5039\e[m\e[33m (\e[m\e[1;32musingtype\e[m\e[33m)\e[m HEAD@{1066}: commit (amend): Reland "[AST] Add UsingType: a sugar type for types found via UsingDecl"
+\e[33mbbc902a8436d\e[m HEAD@{1067}: revert: Reland "[AST] Add UsingType: a sugar type for types found via UsingDecl"
+\e[33mcc56c66f27e1\e[m HEAD@{1068}: revert: Revert "[AST] Add UsingType: a sugar type for types found via UsingDecl"
+\e[33m565c17574dd0\e[m HEAD@{1069}: rebase (finish): returning to refs/heads/usingtype
+\e[33m565c17574dd0\e[m HEAD@{1070}: rebase (start): checkout origin/main
+\e[33me1600db19d63\e[m HEAD@{1071}: rebase (finish): returning to refs/heads/usingtype
+\e[33me1600db19d63\e[m HEAD@{1072}: rebase (pick): [AST] Add UsingType: a sugar type for types found via UsingDecl
+\e[33meb66f0662ad9\e[m HEAD@{1073}: rebase (start): checkout origin/main
+\e[33me5706481005a\e[m HEAD@{1074}: commit (amend): [AST] Add UsingType: a sugar type for types found via UsingDecl
+\e[33mc11ab3c47b88\e[m HEAD@{1075}: rebase (finish): returning to refs/heads/usingtype
+\e[33mc11ab3c47b88\e[m HEAD@{1076}: rebase (pick): [AST] Add UsingType: a sugar type for types found via UsingDecl
+\e[33m9cd55c7c3463\e[m HEAD@{1077}: rebase (start): checkout origin/main
+\e[33m77701d00dbf1\e[m HEAD@{1078}: commit (amend): [AST] Add UsingType: a sugar type for types found via UsingDecl
+\e[33m484ad728d0b4\e[m HEAD@{1079}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33m38567f18b381\e[m HEAD@{1080}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33m73794c07c44c\e[m HEAD@{1081}: rebase (finish): returning to refs/heads/usingtype
+\e[33m73794c07c44c\e[m HEAD@{1082}: rebase (pick): [AST] Add a sugar type for types found via UsingDecl
+\e[33m02fc8d5c9eb0\e[m HEAD@{1083}: rebase (start): checkout origin/main
+\e[33m528e4f3170f7\e[m HEAD@{1084}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33m06aa0ecaf0ad\e[m HEAD@{1085}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33meb52127d5587\e[m HEAD@{1086}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33m383df0a0d6e6\e[m HEAD@{1087}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33mc4f8be2c2d68\e[m HEAD@{1088}: rebase (continue) (finish): returning to refs/heads/usingtype
+\e[33mc4f8be2c2d68\e[m HEAD@{1089}: rebase (continue): [AST] Add a sugar type for types found via UsingDecl
+\e[33ma596a5fc128b\e[m HEAD@{1090}: rebase (start): checkout origin/main
+\e[33m25184d506c43\e[m HEAD@{1091}: checkout: moving from main to usingtype
+\e[33m62bcb75ce510\e[m HEAD@{1092}: commit: [AST] Add more testcases to QualTypeNamesTest. NFC
+\e[33m32dede65ae98\e[m HEAD@{1093}: rebase (finish): returning to refs/heads/main
+\e[33m32dede65ae98\e[m HEAD@{1094}: rebase (pick): [AST] Fix QualTypeNamesTest, which was spuriously passing
+\e[33m509153f1e7d1\e[m HEAD@{1095}: rebase (start): checkout origin/main
+\e[33m8b9423dcec0a\e[m HEAD@{1096}: commit: [AST] Fix QualTypeNamesTest, which was spuriously passing
+\e[33mebed0ca71561\e[m HEAD@{1097}: rebase (finish): returning to refs/heads/main
+\e[33mebed0ca71561\e[m HEAD@{1098}: rebase (start): checkout origin/main
+\e[33m6fef0ffa14a3\e[m HEAD@{1099}: checkout: moving from usingtype to main
+\e[33m25184d506c43\e[m HEAD@{1100}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33m63d52ad6d61f\e[m HEAD@{1101}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33mc0adf4433852\e[m HEAD@{1102}: checkout: moving from origin to usingtype
+\e[33m8491272d5f8b\e[m\e[33m (\e[m\e[1;32morigin\e[m\e[33m)\e[m HEAD@{1103}: commit (amend): [clangd] Extend SymbolOrigin, stop serializing it
+\e[33m58f8efe72279\e[m HEAD@{1104}: rebase (finish): returning to refs/heads/origin
+\e[33m58f8efe72279\e[m HEAD@{1105}: rebase (pick): [clangd] Extend SymbolOrigin, stop serializing it
+\e[33me7007b69d43b\e[m\e[33m (\e[m\e[1;32mfixx\e[m\e[33m)\e[m HEAD@{1106}: rebase (start): checkout origin/main
+\e[33mddcc1d2c88de\e[m HEAD@{1107}: checkout: moving from fixx to origin
+\e[33me7007b69d43b\e[m\e[33m (\e[m\e[1;32mfixx\e[m\e[33m)\e[m HEAD@{1108}: rebase (finish): returning to refs/heads/fixx
+\e[33me7007b69d43b\e[m\e[33m (\e[m\e[1;32mfixx\e[m\e[33m)\e[m HEAD@{1109}: rebase (pick): [Sema] Add FixIt when a C++ out-of-line method has extra/missing const
+\e[33m54fc9eb9b313\e[m HEAD@{1110}: rebase (start): checkout origin/main
+\e[33m563ef9895a46\e[m HEAD@{1111}: commit (amend): [Sema] Add FixIt when a C++ out-of-line method has extra/missing const
+\e[33meb9db3287358\e[m HEAD@{1112}: rebase (finish): returning to refs/heads/fixx
+\e[33meb9db3287358\e[m HEAD@{1113}: rebase (pick): [Sema] Add FixIt when a C++ out-of-line method has extra/missing const
+\e[33m529833377ccd\e[m\e[33m (\e[m\e[1;32mblock\e[m\e[33m)\e[m HEAD@{1114}: rebase (start): checkout origin/main
+\e[33m9344dda72035\e[m HEAD@{1115}: checkout: moving from block to fixx
+\e[33m529833377ccd\e[m\e[33m (\e[m\e[1;32mblock\e[m\e[33m)\e[m HEAD@{1116}: rebase (finish): returning to refs/heads/block
+\e[33m529833377ccd\e[m\e[33m (\e[m\e[1;32mblock\e[m\e[33m)\e[m HEAD@{1117}: rebase (pick): [clangd] Disable support for clang-tidy suppression blocks (NOLINTBEGIN)
+\e[33ma908ca6603ab\e[m HEAD@{1118}: rebase (start): checkout origin/main
+\e[33me65ea60537a7\e[m HEAD@{1119}: checkout: moving from asyncindex to block
+\e[33m747908384732\e[m\e[33m (\e[m\e[1;32masyncindex\e[m\e[33m)\e[m HEAD@{1120}: rebase (continue) (finish): returning to refs/heads/asyncindex
+\e[33m747908384732\e[m\e[33m (\e[m\e[1;32masyncindex\e[m\e[33m)\e[m HEAD@{1121}: rebase (continue): [clangd] Proof of concept: indexing after the preamble is built
+\e[33ma5927737daeb\e[m HEAD@{1122}: rebase (start): checkout origin/main
+\e[33m3f8dfb604b16\e[m HEAD@{1123}: checkout: moving from shared to asyncindex
+\e[33m6917f87b3c7c\e[m\e[33m (\e[m\e[1;32mshared\e[m\e[33m)\e[m HEAD@{1124}: rebase (finish): returning to refs/heads/shared
+\e[33m6917f87b3c7c\e[m\e[33m (\e[m\e[1;32mshared\e[m\e[33m)\e[m HEAD@{1125}: rebase (pick): [clangd] Cleanup unneeded use of shared_ptr. NFC
+\e[33m4299d8d0ce42\e[m HEAD@{1126}: rebase (start): checkout origin/main
+\e[33m998c40e04bec\e[m HEAD@{1127}: commit: [clangd] Cleanup unneeded use of shared_ptr. NFC
+\e[33m6fef0ffa14a3\e[m HEAD@{1128}: checkout: moving from main to shared
+\e[33m6fef0ffa14a3\e[m HEAD@{1129}: checkout: moving from asyncindex to main
+\e[33m3f8dfb604b16\e[m HEAD@{1130}: commit (amend): [clangd] Proof of concept: indexing after the preamble is built
+\e[33m69244a114c0c\e[m HEAD@{1131}: commit (amend): [clangd] Proof of concept: indexing after the preamble is built
+\e[33me0ed01382993\e[m HEAD@{1132}: commit: [clangd] Proof of concept: indexing after the preamble is built
+\e[33m6fef0ffa14a3\e[m HEAD@{1133}: checkout: moving from main to asyncindex
+\e[33m6fef0ffa14a3\e[m HEAD@{1134}: reset: moving to HEAD
+\e[33m6fef0ffa14a3\e[m HEAD@{1135}: reset: moving to HEAD
+\e[33m6fef0ffa14a3\e[m HEAD@{1136}: reset: moving to HEAD
+\e[33m6fef0ffa14a3\e[m HEAD@{1137}: reset: moving to HEAD
+\e[33m6fef0ffa14a3\e[m HEAD@{1138}: checkout: moving from main to main
+\e[33m6fef0ffa14a3\e[m HEAD@{1139}: rebase (finish): returning to refs/heads/main
+\e[33m6fef0ffa14a3\e[m HEAD@{1140}: rebase (start): checkout origin/main
+\e[33m26f6fbe2be1d\e[m HEAD@{1141}: checkout: moving from ccedit to main
+\e[33m782052f2decf\e[m\e[33m (\e[m\e[1;31mfork/ccedit\e[m\e[33m, \e[m\e[1;32mccedit\e[m\e[33m)\e[m HEAD@{1142}: commit: [clangd] Prototype: code action to edit compile commands
+\e[33m26f6fbe2be1d\e[m HEAD@{1143}: checkout: moving from main to ccedit
+\e[33m26f6fbe2be1d\e[m HEAD@{1144}: reset: moving to origin/main
+\e[33mac431fc2cdf1\e[m\e[33m (\e[m\e[1;32mincomplete\e[m\e[33m)\e[m HEAD@{1145}: reset: moving to origin/main
+\e[33mc797aa934727\e[m HEAD@{1146}: revert: Revert "Revert "[Symbolizer][Debuginfo] Add debuginfod client to llvm-symbolizer.""
+\e[33mafa3c14e2ff9\e[m HEAD@{1147}: checkout: moving from block to main
+\e[33me65ea60537a7\e[m HEAD@{1148}: commit (amend): [clangd] Disable support for clang-tidy suppression blocks (NOLINTBEGIN)
+\e[33mc416e5d69d7e\e[m HEAD@{1149}: commit (amend): [clangd] Disable support for clang-tidy suppression blocks (NOLINTBEGIN)
+\e[33m2c1e87eae0e2\e[m HEAD@{1150}: commit: [clangd] Disable support for clang-tidy suppression blocks (NOLINTBEGIN)
+\e[33mafa3c14e2ff9\e[m HEAD@{1151}: checkout: moving from main to block
+\e[33mafa3c14e2ff9\e[m HEAD@{1152}: checkout: moving from fixx to main
+\e[33m9344dda72035\e[m HEAD@{1153}: commit (amend): [Sema] Add FixIt when a C++ out-of-line method has extra/missing const
+\e[33mfb15c379c1f0\e[m HEAD@{1154}: commit (amend): [Sema] Add FixIt when a C++ out-of-line method has extra/missing const
+\e[33mbe240d2b0505\e[m HEAD@{1155}: commit: [Sema] Add FixIt when a C++ out-of-line method has extra/missing const
+\e[33mac431fc2cdf1\e[m\e[33m (\e[m\e[1;32mincomplete\e[m\e[33m)\e[m HEAD@{1156}: checkout: moving from incomplete to fixx
+\e[33mac431fc2cdf1\e[m\e[33m (\e[m\e[1;32mincomplete\e[m\e[33m)\e[m HEAD@{1157}: rebase (finish): returning to refs/heads/incomplete
+\e[33mac431fc2cdf1\e[m\e[33m (\e[m\e[1;32mincomplete\e[m\e[33m)\e[m HEAD@{1158}: rebase (pick): [clangd] ... and mark a new test as -fno-ms-compatibility too
+\e[33m30fc88bf1dc1\e[m HEAD@{1159}: rebase (start): checkout origin/main
+\e[33md3aa8d688374\e[m HEAD@{1160}: commit (amend): [clangd] ... and mark a new test as -fno-ms-compatibility too
+\e[33m03d0b9092b60\e[m HEAD@{1161}: commit: [clangd] ... and mark a new test as -fno-ms-compatibility too
+\e[33m1a68c14b577f\e[m HEAD@{1162}: reset: moving to HEAD
+\e[33m1a68c14b577f\e[m HEAD@{1163}: rebase (finish): returning to refs/heads/incomplete
+\e[33m1a68c14b577f\e[m HEAD@{1164}: rebase (pick): [clangd] Restore -fno-ms-compatibility to tests
+\e[33m8d897ec91528\e[m HEAD@{1165}: rebase (start): checkout origin/main
+\e[33mac5910467704\e[m HEAD@{1166}: commit: [clangd] Restore -fno-ms-compatibility to tests
+\e[33mc25ea488a39a\e[m HEAD@{1167}: reset: moving to HEAD
+\e[33mc25ea488a39a\e[m HEAD@{1168}: rebase (finish): returning to refs/heads/incomplete
+\e[33mc25ea488a39a\e[m HEAD@{1169}: rebase (pick): [clangd] Include-fixer: handle more "incomplete type" diags.
+\e[33ma55e51f9a64c\e[m HEAD@{1170}: rebase (start): checkout origin/main
+\e[33m11a2f06c37cc\e[m HEAD@{1171}: commit (amend): [clangd] Include-fixer: handle more "incomplete type" diags.
+\e[33m8182fffc0500\e[m HEAD@{1172}: rebase (continue) (finish): returning to refs/heads/incomplete
+\e[33m8182fffc0500\e[m HEAD@{1173}: rebase (continue): [clangd] Include-fixer: handle more "incomplete type" diags.
+\e[33m86caf517bf05\e[m HEAD@{1174}: rebase (start): checkout origin/main
+\e[33m0958968acbe0\e[m HEAD@{1175}: checkout: moving from incompletenfc to incomplete
+\e[33ma8bf389f4146\e[m\e[33m (\e[m\e[1;32mincompletenfc\e[m\e[33m)\e[m HEAD@{1176}: rebase (finish): returning to refs/heads/incompletenfc
+\e[33ma8bf389f4146\e[m\e[33m (\e[m\e[1;32mincompletenfc\e[m\e[33m)\e[m HEAD@{1177}: rebase (pick): [clangd] Clean up some include-fixer tests. NFC
+\e[33m3ed47bcc9618\e[m HEAD@{1178}: rebase (start): checkout origin/main
+\e[33m76820d557062\e[m HEAD@{1179}: commit (amend): [clangd] Clean up some include-fixer tests. NFC
+\e[33mc28420e6737b\e[m HEAD@{1180}: commit (amend): [clangd] Clean up some include-fixer tests. NFC
+\e[33mb48226a052b2\e[m HEAD@{1181}: commit (amend): [clangd] Clean up some include-fixer tests. NFC
+\e[33m0958968acbe0\e[m HEAD@{1182}: checkout: moving from incomplete to incompletenfc
+\e[33m0958968acbe0\e[m HEAD@{1183}: checkout: moving from main to incomplete
+\e[33mafa3c14e2ff9\e[m HEAD@{1184}: checkout: moving from indeximplicit to main
+\e[33m0d64c65efac9\e[m\e[33m (\e[m\e[1;32mindeximplicit\e[m\e[33m)\e[m HEAD@{1185}: cherry-pick: [clangd] Indexing of standard library
+\e[33mee26e0ba082e\e[m\e[33m (\e[m\e[1;32mimplicitc\e[m\e[33m)\e[m HEAD@{1186}: checkout: moving from implicitc to indeximplicit
+\e[33mee26e0ba082e\e[m\e[33m (\e[m\e[1;32mimplicitc\e[m\e[33m)\e[m HEAD@{1187}: commit (amend): [clangd] Include fixer for missing functions in C
+\e[33m9ac5d003594e\e[m HEAD@{1188}: commit (amend): [clangd] Include fixer for missing functions in C
+\e[33m3b4429acb859\e[m HEAD@{1189}: commit (amend): [clangd] Include fixer for missing functions in C
+\e[33m1a75bc322127\e[m HEAD@{1190}: commit (amend): [clangd] Include fixer for missing functions in C
+\e[33m94ab31f3c7a8\e[m HEAD@{1191}: commit (amend): [clangd] Include fixer for missing functions in C
+\e[33m86494fa881eb\e[m HEAD@{1192}: commit: [clangd] Include fixer for missing functions in C
+\e[33mafa3c14e2ff9\e[m HEAD@{1193}: checkout: moving from main to implicitc
+\e[33mafa3c14e2ff9\e[m HEAD@{1194}: rebase (finish): returning to refs/heads/main
+\e[33mafa3c14e2ff9\e[m HEAD@{1195}: rebase (start): checkout origin/main
+\e[33md4865393b5da\e[m HEAD@{1196}: checkout: moving from incomplete to main
+\e[33m0958968acbe0\e[m HEAD@{1197}: commit (amend): [clangd] Include-fixer: handle more "incomplete type" diags, clean up tests
+\e[33maa89c6b2a300\e[m HEAD@{1198}: commit (amend): [clangd] Include-fixer: handle more "incomplete type" diags, clean up tests
+\e[33m153236d44e9a\e[m HEAD@{1199}: commit (amend): [clangd] Include-fixer: handle more "incomplete type" diags, clean up tests
+\e[33m3f0f560caf3a\e[m HEAD@{1200}: commit: [clangd] Include-fixer: handle more "incomplete type" diags, clean up tests
+\e[33md4865393b5da\e[m HEAD@{1201}: checkout: moving from main to incomplete
+\e[33md4865393b5da\e[m HEAD@{1202}: reset: moving to HEAD
+\e[33md4865393b5da\e[m HEAD@{1203}: rebase (finish): returning to refs/heads/main
+\e[33md4865393b5da\e[m HEAD@{1204}: rebase (start): checkout origin/main
+\e[33me7f53ec78fe8\e[m HEAD@{1205}: checkout: moving from tblgen to main
+\e[33m7ef23188fe95\e[m\e[33m (\e[m\e[1;32mtblgen\e[m\e[33m)\e[m HEAD@{1206}: commit (amend): [clangd] Generate ConfigFragment/YAML/docs from one tablegen source
+\e[33m6bdf61f016e3\e[m HEAD@{1207}: commit (amend): [clangd] Generate ConfigFragment/YAML/docs from one tablegen source
+\e[33me249c35c3fb4\e[m HEAD@{1208}: commit (amend): [clangd] Generate ConfigFragment/YAML/docs from one tablegen source
+\e[33mfcf5c9f5bf33\e[m HEAD@{1209}: commit (amend): [clangd] Generate ConfigFragment/YAML/docs from one tablegen source
+\e[33m7b3888a32700\e[m HEAD@{1210}: rebase (continue) (finish): returning to refs/heads/tblgen
+\e[33m7b3888a32700\e[m HEAD@{1211}: rebase (continue): [clangd] Generate ConfigFragment/YAML/docs from one tablegen source
+\e[33m4afae6f7c7f6\e[m HEAD@{1212}: rebase (start): checkout origin/main
+\e[33m34b10022310a\e[m HEAD@{1213}: commit: [clangd] Generate ConfigFragment/YAML/docs from one tablegen source
+\e[33me7f53ec78fe8\e[m HEAD@{1214}: checkout: moving from main to tblgen
+\e[33me7f53ec78fe8\e[m HEAD@{1215}: checkout: moving from two to main
+\e[33mc56122daac76\e[m HEAD@{1216}: reset: moving to HEAD
+\e[33mc56122daac76\e[m HEAD@{1217}: commit (amend): [Parse] Use empty RecoveryExpr when if/while/do/switch conditions fail to parse
+\e[33m2409b3d46f6c\e[m HEAD@{1218}: rebase (finish): returning to refs/heads/two
+\e[33m2409b3d46f6c\e[m HEAD@{1219}: rebase (pick): [Parse] Use empty RecoveryExpr when if/while/do/switch conditions fail to parse
+\e[33m2676759bf22e\e[m\e[33m (\e[m\e[1;32mmorefix\e[m\e[33m)\e[m HEAD@{1220}: rebase (start): checkout origin/main
+\e[33mad885f5a3eab\e[m\e[33m (\e[m\e[1;32marcpatch-D112996\e[m\e[33m)\e[m HEAD@{1221}: checkout: moving from morefix to two
+\e[33m2676759bf22e\e[m\e[33m (\e[m\e[1;32mmorefix\e[m\e[33m)\e[m HEAD@{1222}: rebase (finish): returning to refs/heads/morefix
+\e[33m2676759bf22e\e[m\e[33m (\e[m\e[1;32mmorefix\e[m\e[33m)\e[m HEAD@{1223}: rebase (pick): [clangd] Add fixes for clang "include <foo.h>" diagnostics
+\e[33mb73cf6207efa\e[m HEAD@{1224}: rebase (start): checkout origin/main
+\e[33mda7ff2db120f\e[m HEAD@{1225}: rebase (finish): returning to refs/heads/morefix
+\e[33mda7ff2db120f\e[m HEAD@{1226}: rebase (pick): [clangd] Add fixes for clang "include <foo.h>" diagnostics
+\e[33m77b2bb55671a\e[m HEAD@{1227}: rebase (start): checkout origin/main
+\e[33m8bf667957ed0\e[m HEAD@{1228}: commit (amend): [clangd] Add fixes for clang "include <foo.h>" diagnostics
+\e[33m56f023ff10d2\e[m HEAD@{1229}: commit (amend): [clangd] Add fixes for clang "include <foo.h>" diagnostics
+\e[33m805bac439319\e[m HEAD@{1230}: checkout: moving from origin to morefix
+\e[33mddcc1d2c88de\e[m HEAD@{1231}: commit (amend): [clangd] Extend SymbolOrigin, stop serializing it
+\e[33me4568ef854df\e[m HEAD@{1232}: commit (amend): [clangd] Extend SymbolOrigin, stop serializing it
+\e[33m9099df1707fe\e[m HEAD@{1233}: checkout: moving from stdlib to origin
+\e[33mcdfb640fe9e8\e[m\e[33m (\e[m\e[1;32mstdlib\e[m\e[33m)\e[m HEAD@{1234}: commit (amend): [clangd] Indexing of standard library
+\e[33m5c14772f82eb\e[m HEAD@{1235}: commit (amend): [clangd] Indexing of standard library
+\e[33m9bcdbb99a75b\e[m HEAD@{1236}: commit (amend): [clangd] WIP various stdlib indexing stuff
+\e[33m3e38a40b3f17\e[m HEAD@{1237}: commit (amend): [clangd] WIP various stdlib indexing stuff
+\e[33m4ac5a41a65fc\e[m HEAD@{1238}: rebase (finish): returning to refs/heads/stdlib
+\e[33m4ac5a41a65fc\e[m HEAD@{1239}: rebase (pick): [clangd] WIP various stdlib indexing stuff
+\e[33me1b9d805325b\e[m HEAD@{1240}: rebase (start): checkout origin/main
+\e[33m5330f525f264\e[m\e[33m (\e[m\e[1;32marcpatch-D105177\e[m\e[33m)\e[m HEAD@{1241}: checkout: moving from arcpatch-D105177 to stdlib
+\e[33m5330f525f264\e[m\e[33m (\e[m\e[1;32marcpatch-D105177\e[m\e[33m)\e[m HEAD@{1242}: checkout: moving from reserved to arcpatch-D105177
+\e[33m18cd067d0bfa\e[m\e[33m (\e[m\e[1;32mreserved\e[m\e[33m)\e[m HEAD@{1243}: commit (amend): [clangd] Don't index __reserved_names in headers.
+\e[33m06dd586e7297\e[m HEAD@{1244}: commit (amend): [clangd] Don't index __reserved_names in headers.
+\e[33me58aab51c464\e[m HEAD@{1245}: commit (amend): [clangd] Don't index __reserved_names in headers.
+\e[33m05a7bfb157fc\e[m HEAD@{1246}: commit: [clangd] Don't index __reserved_names in headers.
+\e[33me7f53ec78fe8\e[m HEAD@{1247}: checkout: moving from main to reserved
+\e[33me7f53ec78fe8\e[m HEAD@{1248}: checkout: moving from origin to main
+\e[33m9099df1707fe\e[m HEAD@{1249}: commit (amend): [clangd] Extend SymbolOrigin, stop serializing it
+\e[33m1557821a2bd2\e[m HEAD@{1250}: commit (amend): [clangd] Extend SymbolOrigin, stop serializing it
+\e[33m8c3bd3cc7478\e[m HEAD@{1251}: commit (amend): [clangd] Extend SymbolOrigin, stop serializing it
+\e[33mcb761c799928\e[m HEAD@{1252}: commit: [clangd] Extend SymbolOrigin, stop serializing it
+\e[33me7f53ec78fe8\e[m HEAD@{1253}: checkout: moving from main to origin
+\e[33me7f53ec78fe8\e[m HEAD@{1254}: rebase (finish): returning to refs/heads/main
+\e[33me7f53ec78fe8\e[m HEAD@{1255}: rebase (start): checkout origin/main
+\e[33mafc9e7517ada\e[m HEAD@{1256}: checkout: moving from arcpatch-D105177 to main
+\e[33m5330f525f264\e[m\e[33m (\e[m\e[1;32marcpatch-D105177\e[m\e[33m)\e[m HEAD@{1257}: commit (amend): [clangd] WIP various stdlib indexing stuff
+\e[33m4c58226488ee\e[m HEAD@{1258}: commit (amend): [clangd] WIP various stdlib indexing stuff
+\e[33mffbc79cbcc54\e[m HEAD@{1259}: commit (amend): [clangd] WIP various stdlib indexing stuff
+\e[33m5d5179621ede\e[m HEAD@{1260}: checkout: moving from main to arcpatch-D105177
+\e[33mafc9e7517ada\e[m HEAD@{1261}: rebase (finish): returning to refs/heads/main
+\e[33mafc9e7517ada\e[m HEAD@{1262}: rebase (start): checkout origin/main
+\e[33mf764a1a5bd7c\e[m HEAD@{1263}: checkout: moving from arcpatch-D105177 to main
+\e[33m5d5179621ede\e[m HEAD@{1264}: reset: moving to HEAD
+\e[33m5d5179621ede\e[m HEAD@{1265}: rebase (finish): returning to refs/heads/arcpatch-D105177
+\e[33m5d5179621ede\e[m HEAD@{1266}: rebase (pick): [clangd] Implemented indexing of standard library
+\e[33m25c7ec4fc622\e[m HEAD@{1267}: rebase (start): checkout origin/main
+\e[33m7f2bbbd16a82\e[m HEAD@{1268}: commit: [clangd] Implemented indexing of standard library
+\e[33m15acaad79d6e\e[m HEAD@{1269}: checkout: moving from main to arcpatch-D105177
+\e[33mf764a1a5bd7c\e[m HEAD@{1270}: checkout: moving from morefix to main
+\e[33m805bac439319\e[m HEAD@{1271}: commit (amend): [clangd] Add fixes for clang "include <foo.h>" diagnostics
+\e[33mc74d8a0e6f33\e[m HEAD@{1272}: commit (amend): [clangd] Add fixes for clang "include <foo.h>" diagnostics
+\e[33m86d15e9770ca\e[m HEAD@{1273}: commit (amend): [clangd] Add fixes for clang "include <foo.h>" diagnostics
+\e[33ma46d34a114b3\e[m HEAD@{1274}: commit: [clangd] Add fixes for clang "include <foo.h>" diagnostics
+\e[33mf764a1a5bd7c\e[m HEAD@{1275}: checkout: moving from main to morefix
+\e[33mf764a1a5bd7c\e[m HEAD@{1276}: checkout: moving from usingtype to main
+\e[33mc0adf4433852\e[m HEAD@{1277}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33m661fde2dfe7c\e[m HEAD@{1278}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33mf38cd8c69f6d\e[m HEAD@{1279}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33m4b8286a14790\e[m HEAD@{1280}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33m480e5803b30f\e[m HEAD@{1281}: commit (amend): [AST] Add a sugar type for types found via UsingDecl
+\e[33m06cc1d22bf04\e[m HEAD@{1282}: rebase (finish): returning to refs/heads/usingtype
+\e[33m06cc1d22bf04\e[m HEAD@{1283}: rebase (pick): [AST] Add a sugar type for types found via UsingDecl
+\e[33mc133fb321f7c\e[m HEAD@{1284}: rebase (start): checkout origin/main
+\e[33m8545d9204be1\e[m HEAD@{1285}: rebase (abort): updating HEAD
+\e[33m8545d9204be1\e[m HEAD@{1286}: rebase (abort): updating HEAD
+\e[33m8545d9204be1\e[m HEAD@{1287}: checkout: moving from main to usingtype
+\e[33mf764a1a5bd7c\e[m HEAD@{1288}: rebase (finish): returning to refs/heads/main
+\e[33mf764a1a5bd7c\e[m HEAD@{1289}: rebase (pick): [clangd] Avoid possible crash: apply configuration after binding methods
+\e[33ma6f53afbcb4d\e[m HEAD@{1290}: rebase (finish): returning to refs/heads/main
+\e[33ma6f53afbcb4d\e[m HEAD@{1291}: rebase (start): checkout origin/main
+\e[33m5fedbd5b1815\e[m HEAD@{1292}: checkout: moving from main to usingtype
+\e[33m5fedbd5b1815\e[m HEAD@{1293}: checkout: moving from token to main
+\e[33m3878ad5e448c\e[m\e[33m (\e[m\e[1;32mtoken\e[m\e[33m)\e[m HEAD@{1294}: commit: xxx token
+\e[33m5fedbd5b1815\e[m HEAD@{1295}: checkout: moving from main to token
+\e[33m5fedbd5b1815\e[m HEAD@{1296}: rebase (finish): returning to refs/heads/main
+\e[33m5fedbd5b1815\e[m HEAD@{1297}: rebase (start): checkout origin/main
+\e[33me56d680fe870\e[m HEAD@{1298}: checkout: moving from iwyustdlib to main
+\e[33me56d680fe870\e[m HEAD@{1299}: checkout: moving from main to iwyustdlib
+\e[33me56d680fe870\e[m HEAD@{1300}: rebase (finish): returning to refs/heads/main
+\e[33me56d680fe870\e[m HEAD@{1301}: rebase (start): checkout origin/main
+\e[33m4fb62e138398\e[m HEAD@{1302}: checkout: moving from placeholders to main
+\e[33m8ac9d2ae5839\e[m\e[33m (\e[m\e[1;32mplaceholders\e[m\e[33m)\e[m HEAD@{1303}: rebase (finish): returning to refs/heads/placeholders
+\e[33m8ac9d2ae5839\e[m\e[33m (\e[m\e[1;32mplaceholders\e[m\e[33m)\e[m HEAD@{1304}: rebase (pick): [clangd] Fix function-arg-placeholder suppression with macros.
+\e[33mebda5e1e521f\e[m HEAD@{1305}: checkout: moving from main to placeholders
+\e[33mebda5e1e521f\e[m HEAD@{1306}: rebase (finish): returning to refs/heads/main
+\e[33mebda5e1e521f\e[m HEAD@{1307}: rebase (start): checkout origin/main
+\e[33m48b67dca2ccc\e[m HEAD@{1308}: checkout: moving from two to main
+\e[33mad885f5a3eab\e[m\e[33m (\e[m\e[1;32marcpatch-D112996\e[m\e[33m)\e[m HEAD@{1309}: checkout: moving from arcpatch-D112996 to two
+\e[33m63667c1896e1\e[m HEAD@{1310}: rebase (finish): returning to refs/heads/arcpatch-D112996
+\e[33m63667c1896e1\e[m HEAD@{1311}: rebase (pick): [clangd] Trace per-token time in clangd --check
+\e[33mf7500a4ef7bd\e[m HEAD@{1312}: rebase (pick): [CodeCompletion] Generally consider header files without extension
+\e[33m5fbcf677347e\e[m HEAD@{1313}: checkout: moving from main to arcpatch-D112996
+\e[33m48b67dca2ccc\e[m HEAD@{1314}: rebase (finish): returning to refs/heads/main
+\e[33m48b67dca2ccc\e[m HEAD@{1315}: rebase (start): checkout origin/main
+\e[33m627fa0b9a897\e[m HEAD@{1316}: reset: moving to HEAD
+\e[33m627fa0b9a897\e[m HEAD@{1317}: checkout: moving from enum to main
+\e[33m5880c835bdbe\e[m\e[33m (\e[m\e[1;32menum\e[m\e[33m)\e[m HEAD@{1318}: reset: moving to HEAD
+\e[33m5880c835bdbe\e[m\e[33m (\e[m\e[1;32menum\e[m\e[33m)\e[m HEAD@{1319}: reset: moving to HEAD
+\e[33m5880c835bdbe\e[m\e[33m (\e[m\e[1;32menum\e[m\e[33m)\e[m HEAD@{1320}: rebase (finish): returning to refs/heads/enum
+\e[33m5880c835bdbe\e[m\e[33m (\e[m\e[1;32menum\e[m\e[33m)\e[m HEAD@{1321}: rebase (pick): [Sema] Avoid crash in CheckEnumConstant with contains-error expressions
+\e[33m6a5e08cc4a5c\e[m\e[33m (\e[m\e[1;32mredecl\e[m\e[33m)\e[m HEAD@{1322}: rebase (finish): returning to refs/heads/redecl
+\e[33m6a5e08cc4a5c\e[m\e[33m (\e[m\e[1;32mredecl\e[m\e[33m)\e[m HEAD@{1323}: rebase (pick): [AST] injected-class-name is not a redecl, even in template specializations
+\e[33m627fa0b9a897\e[m HEAD@{1324}: checkout: moving from main to redecl
+\e[33m627fa0b9a897\e[m HEAD@{1325}: rebase (finish): returning to refs/heads/main
+\e[33m627fa0b9a897\e[m HEAD@{1326}: rebase (start): checkout origin/main
+\e[33mf06e33298266\e[m HEAD@{1327}: rebase (abort): updating HEAD
+\e[33mf06e33298266\e[m HEAD@{1328}: rebase (abort): updating HEAD
+\e[33mf06e33298266\e[m HEAD@{1329}: checkout: moving from specialfiles to main
+\e[33m73453e7adecb\e[m\e[33m (\e[m\e[1;32mspecialfiles\e[m\e[33m)\e[m HEAD@{1330}: rebase (finish): returning to refs/heads/specialfiles
+\e[33m73453e7adecb\e[m\e[33m (\e[m\e[1;32mspecialfiles\e[m\e[33m)\e[m HEAD@{1331}: rebase (pick): [clangd] Avoid expensive checks of buffer names in IncludeCleaner
+\e[33mde7494a33a5c\e[m\e[33m (\e[m\e[1;32mconstcrash\e[m\e[33m)\e[m HEAD@{1332}: rebase (finish): returning to refs/heads/constcrash
+\e[33mde7494a33a5c\e[m\e[33m (\e[m\e[1;32mconstcrash\e[m\e[33m)\e[m HEAD@{1333}: rebase (pick): [AST] fail rather than crash when const evaluating invalid c++ foreach
+\e[33mf06e33298266\e[m HEAD@{1334}: checkout: moving from main to specialfiles
+\e[33mf06e33298266\e[m HEAD@{1335}: rebase (finish): returning to refs/heads/main
+\e[33mf06e33298266\e[m HEAD@{1336}: rebase (start): checkout origin/main
+\e[33m9cc08cb02fdc\e[m\e[33m (\e[m\e[1;32mcrashtest\e[m\e[33m)\e[m HEAD@{1337}: checkout: moving from crashtest to constcrash
+\e[33m9cc08cb02fdc\e[m\e[33m (\e[m\e[1;32mcrashtest\e[m\e[33m)\e[m HEAD@{1338}: rebase (finish): returning to refs/heads/crashtest
+\e[33m9cc08cb02fdc\e[m\e[33m (\e[m\e[1;32mcrashtest\e[m\e[33m)\e[m HEAD@{1339}: rebase (pick): [clangd] Add integration test for crash handling
+\e[33m51be7061d025\e[m HEAD@{1340}: reset: moving to HEAD
+\e[33m51be7061d025\e[m HEAD@{1341}: checkout: moving from main to crashtest
+\e[33m51be7061d025\e[m HEAD@{1342}: commit: [clangd] Remove tricky integration test that flakes/fails on some platforms.
+\e[33m4373f3595f8e\e[m HEAD@{1343}: rebase (finish): returning to refs/heads/main
+\e[33m4373f3595f8e\e[m HEAD@{1344}: rebase (start): checkout origin/main
+\e[33m045695f85cb8\e[m\e[33m (\e[m\e[1;32marcpatch-D109506_1\e[m\e[33m)\e[m HEAD@{1345}: checkout: moving from timer to main
+\e[33maa1ac2ae451e\e[m\e[33m (\e[m\e[1;32mflush\e[m\e[33m)\e[m HEAD@{1346}: checkout: moving from flush to timer
+\e[33maa1ac2ae451e\e[m\e[33m (\e[m\e[1;32mflush\e[m\e[33m)\e[m HEAD@{1347}: rebase (finish): returning to refs/heads/flush
+\e[33maa1ac2ae451e\e[m\e[33m (\e[m\e[1;32mflush\e[m\e[33m)\e[m HEAD@{1348}: rebase (pick): [clangd] Flush stderr after signal handlers run, so we always get the full stack/crash info
+\e[33m045695f85cb8\e[m\e[33m (\e[m\e[1;32marcpatch-D109506_1\e[m\e[33m)\e[m HEAD@{1349}: checkout: moving from main to flush
+\e[33m045695f85cb8\e[m\e[33m (\e[m\e[1;32marcpatch-D109506_1\e[m\e[33m)\e[m HEAD@{1350}: rebase (finish): returning to refs/heads/main
+\e[33m045695f85cb8\e[m\e[33m (\e[m\e[1;32marcpatch-D109506_1\e[m\e[33m)\e[m HEAD@{1351}: rebase (start): checkout origin/main
+\e[33m4e91035387fa\e[m HEAD@{1352}: checkout: moving from arcpatch-D109506_1 to main
+\e[33m045695f85cb8\e[m\e[33m (\e[m\e[1;32marcpatch-D109506_1\e[m\e[33m)\e[m HEAD@{1353}: rebase (finish): returning to refs/heads/arcpatch-D109506_1
+\e[33m045695f85cb8\e[m\e[33m (\e[m\e[1;32marcpatch-D109506_1\e[m\e[33m)\e[m HEAD@{1354}: rebase (pick): [clangd] Print current request context along with the stack trace
+\e[33m980c7f32490b\e[m HEAD@{1355}: checkout: moving from arcpatch-D111318 to arcpatch-D109506_1
+\e[33ma85b661d2ada\e[m\e[33m (\e[m\e[1;32marcpatch-D111318\e[m\e[33m)\e[m HEAD@{1356}: rebase (finish): returning to refs/heads/arcpatch-D111318
+\e[33ma85b661d2ada\e[m\e[33m (\e[m\e[1;32marcpatch-D111318\e[m\e[33m)\e[m HEAD@{1357}: rebase (pick): [clang][clangd] Improve signature help for variadic functions.
+\e[33m3964c1db915b\e[m HEAD@{1358}: checkout: moving from main to arcpatch-D111318
+\e[33m4e91035387fa\e[m HEAD@{1359}: rebase (finish): returning to refs/heads/main
+\e[33m4e91035387fa\e[m HEAD@{1360}: rebase (pick): [Support] Trim #include after b06df22
+\e[33m93c1b3caf052\e[m HEAD@{1361}: reset: moving to HEAD
+\e[33m93c1b3caf052\e[m HEAD@{1362}: rebase (finish): returning to refs/heads/main
+\e[33m93c1b3caf052\e[m HEAD@{1363}: rebase (start): checkout origin/main
+\e[33mc15bbdeafffb\e[m HEAD@{1364}: checkout: moving from arcpatch-D110825 to main
+\e[33m82fbd3412fec\e[m\e[33m (\e[m\e[1;32marcpatch-D110825\e[m\e[33m)\e[m HEAD@{1365}: commit: [clangd] Handle members of anon structs in SelectionTree
+\e[33m68e56bd320d7\e[m HEAD@{1366}: checkout: moving from main to arcpatch-D110825
+\e[33mc15bbdeafffb\e[m HEAD@{1367}: rebase (finish): returning to refs/heads/main
+\e[33mc15bbdeafffb\e[m HEAD@{1368}: rebase (start): checkout origin/main
+\e[33mbb9333c3504a\e[m HEAD@{1369}: checkout: moving from uid to main
+\e[33m22555bafe90d\e[m\e[33m (\e[m\e[1;32muid\e[m\e[33m)\e[m HEAD@{1370}: rebase (finish): returning to refs/heads/uid
+\e[33m22555bafe90d\e[m\e[33m (\e[m\e[1;32muid\e[m\e[33m)\e[m HEAD@{1371}: rebase (pick): [VFS] InMemoryFilesystem's UniqueIDs are a function of path and content.
+\e[33m722e705f72dd\e[m\e[33m (\e[m\e[1;32marcpatch-D110324\e[m\e[33m)\e[m HEAD@{1372}: checkout: moving from arcpatch-D110324 to uid
+\e[33m722e705f72dd\e[m\e[33m (\e[m\e[1;32marcpatch-D110324\e[m\e[33m)\e[m HEAD@{1373}: rebase (finish): returning to refs/heads/arcpatch-D110324
+\e[33m722e705f72dd\e[m\e[33m (\e[m\e[1;32marcpatch-D110324\e[m\e[33m)\e[m HEAD@{1374}: rebase (start): checkout origin/main
+\e[33meb209c13cce9\e[m HEAD@{1375}: rebase (finish): returning to refs/heads/arcpatch-D110324
+\e[33meb209c13cce9\e[m HEAD@{1376}: rebase (pick): clangd: Do not report inline overrides twice
+\e[33m5685eb950da7\e[m HEAD@{1377}: checkout: moving from main to arcpatch-D110324
+\e[33mbb9333c3504a\e[m HEAD@{1378}: rebase (finish): returning to refs/heads/main
+\e[33mbb9333c3504a\e[m HEAD@{1379}: rebase (start): checkout origin/main
+\e[33m61cc873a8ef1\e[m HEAD@{1380}: checkout: moving from arcpatch-D109506 to main