rjmccall added inline comments.

================
Comment at: clang/lib/AST/Expr.cpp:693
         else
-          MC->mangleName(ND, Out);
+          GD = GlobalDecl(ND);
+        MC->mangleName(GD, Out);
----------------
This will need an extension for your case, right?  Maybe there should be 
comments in `GlobalDecl` pointing out all the places where we need to go from 
an arbitrary `Decl*` to a `GlobalDecl` so that someone adding a new kind of 
discriminated declaration will know to update them all.


================
Comment at: clang/lib/AST/ItaniumMangle.cpp:1563
+  else
+    GD = GlobalDecl(dyn_cast<FunctionDecl>(DC));
+  return GD;
----------------
`cast`?  But I'm not sure this is true, local entities can be in non-function 
declarations: blocks, ObjC methods, and captured statements.  You can just 
`cast<Decl>(DC)`.


================
Comment at: clang/lib/CodeGen/CodeGenModule.cpp:1028
     else
-      MC.mangleName(ND, Out);
+      MC.mangleName(GD, Out);
   } else {
----------------
yaxunl wrote:
> yaxunl wrote:
> > rjmccall wrote:
> > > What would be necessary in order for this to turn into just 
> > > `mangleName(GD, Out)`?   I suspect there are a lot of subtle assumptions 
> > > between the different mangling methods today that could probably be 
> > > broken down a bit and we'd end up with something much cleaner.
> > It seems to be just API changes. I will try changing them.
> I got one issue. When I tried to create `GlobalDecl(CD, Ctor_DefaultClosure)` 
> I got assertion
> 
> include/llvm/ADT/PointerIntPair.h:186: static intptr_t 
> llvm::PointerIntPairInfo<const clang::Decl *, 2, 
> llvm::PointerLikeTypeTraits<const clang::Decl *> >::updateInt(intptr_t, 
> intptr_t) [PointerT = const clang::Decl *, IntBits = 2, PtrTraits = 
> llvm::PointerLikeTypeTraits<const clang::Decl *>]: Assertion `(IntWord & 
> ~IntMask) == 0 && "Integer too large for field"' failed.
> CXXConstructor=v:7:25 (default constructor) (converting constructor)
> 
> This is because Ctor_DefaultClosure has value 4, which exceeds the value that 
> can be put into PointerIntPairInfo
It looks like `Decl` is declared with alignment 8, so yeah, it's safe to make 
that a 3-bit field.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75700/new/

https://reviews.llvm.org/D75700



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to