================
@@ -18,26 +18,68 @@
 #include "clang/AST/NestedNameSpecifierBase.h"
 #include "clang/AST/TemplateBase.h"
 #include "clang/Basic/OptionalUnsigned.h"
+#include "clang/Basic/PartialDiagnostic.h"
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/FoldingSet.h"
 #include "llvm/ADT/PointerUnion.h"
 #include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/TrailingObjects.h"
 #include <utility>
 
 namespace clang {
 
+class ASTContext;
 class ConceptDecl;
 class TemplateDecl;
 class ConceptReference;
 class Expr;
 class NamedDecl;
 struct PrintingPolicy;
 
+/// A compact, trivially-destructible stand-in for \c PartialDiagnostic 
suitable
+/// for storage on the AST and for serialization.
+///
+/// Unlike \c PartialDiagnostic it doesn't own a \c DiagnosticStorage and is 
not
+/// tied to a \c DiagStorageAllocator: only part of the arguments that are
+/// currently used by SFINAE diagnostics are kept.
+///
+class ASTPartialDiagnostic final
+    : private llvm::TrailingObjects<ASTPartialDiagnostic, uint64_t, uint32_t,
+                                    CharSourceRange> {
+  friend TrailingObjects;
+
+  /// Low bits of each packed word hold the ArgumentKind; the rest is the
+  /// (string) text length.
----------------
erichkeane wrote:

What is going on here?  

A lot of stuff in the trailing objects too?  Can you better explain the layout 
here? 

https://github.com/llvm/llvm-project/pull/211767
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to