[PATCH] D61407: [MS] Change the metadata for heapallocsite calls when the function return type is cast.

Reid Kleckner via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 1 15:32:21 PDT 2019


rnk added a comment.

Nice, this is way less complicated than we thought originally.



================
Comment at: clang/lib/CodeGen/CGExprScalar.cpp:572
     CGF.CGM.EmitExplicitCastExprType(E, &CGF);
+
     return VisitCastExpr(E);
----------------
Please revert unrelated whitespace changes.


================
Comment at: clang/lib/CodeGen/CGExprScalar.cpp:2068
+    // Update heapallocsite metadata when there is an explicit cast.
+    if (llvm::CallInst *CI = dyn_cast<llvm::CallInst>(Src))
+      if (CI->getMetadata("heapallocsite") && dyn_cast<ExplicitCastExpr>(CE))
----------------
One thought I had here was, should this look through casts? I guess, what does MSVC do in wacky cases like this:
  struct Foo; struct Bar;
  Foo *p = (Foo*)(Bar*)malloc(42);

I tested locally, and MSVC emits the first cast as the allocated type, so I guess that's consistent with what you have. Let's add the double cast test case to be thorough, though.


================
Comment at: llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp:1093
       OS.AddComment("Type index");
-      OS.EmitIntValue(getCompleteTypeIndex(DITy).getIndex(), 4);
       endSymbolRecord(HeapAllocEnd);
----------------
This change is unrelated, and also surprising to me, usually any symbol record wants to refer to the complete type index if it can.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D61407





More information about the cfe-commits mailing list