[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