================
@@ -494,6 +500,18 @@ static void profileIntValue(llvm::FoldingSetNodeID &ID, 
const llvm::APInt &V) {
     ID.AddInteger((uint32_t)V.extractBitsAsZExtValue(std::min(32u, N - I), I));
 }
 
+static void profileReflection(llvm::FoldingSetNodeID &ID, APValue V) {
+  ID.AddInteger(static_cast<int>(V.getReflectionOperandKind()));
+  switch (V.getReflectionOperandKind()) {
+    case ReflectionKind::Type: {
+      const TypeSourceInfo* info = static_cast<const 
TypeSourceInfo*>(V.getOpaqueReflectionOperand());
+      ID.AddPointer((info->getType().getCanonicalType().getAsOpaquePtr()));
----------------
Sirraide wrote:

Yeah, I have a feeling that this might get a bit complicated then because e.g. 
if `Foo` is a record type, both `struct Foo` and `class Foo` denote the same 
type (and afaik their reflections should be equivalent), but iirc they end up 
being different non-canonical `Type*`s...

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

Reply via email to