pcc added inline comments.

================
Comment at: lib/CodeGen/CGClass.cpp:2564
@@ -2563,16 +2563,3 @@
 
-  SanitizerMask M;
-  switch (TCK) {
-  case CFITCK_VCall:
-    M = SanitizerKind::CFIVCall;
-    break;
-  case CFITCK_NVCall:
-    M = SanitizerKind::CFINVCall;
-    break;
-  case CFITCK_DerivedCast:
-    M = SanitizerKind::CFIDerivedCast;
-    break;
-  case CFITCK_UnrelatedCast:
-    M = SanitizerKind::CFIUnrelatedCast;
-    break;
-  }
+  if (CGM.getCodeGenOpts().SanitizeCfiCrossDso &&
+      isExternallyVisible(RD->getTypeForDecl()->getLinkage())) {
----------------
This could be an early return.

================
Comment at: lib/CodeGen/CGExpr.cpp:2560
@@ +2559,3 @@
+  llvm::MDString *MDS = dyn_cast<llvm::MDString>(MD);
+  assert(MDS);
+  llvm::Constant *TypeId =
----------------
Use cast instead of dyn_cast/assert (but see my other comment).

================
Comment at: lib/CodeGen/CGExpr.cpp:3871
@@ +3870,3 @@
+        isa<llvm::MDNode>(MD) && dyn_cast<llvm::MDNode>(MD)->isDistinct();
+    if (CGM.getCodeGenOpts().SanitizeCfiCrossDso && !hasLocalScope) {
+      EmitCfiSlowPathCheck(BitSetTest, MD, CastedCallee);
----------------
Early return.

================
Comment at: lib/CodeGen/CodeGenModule.cpp:996
@@ +995,3 @@
+      !(isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic()) &&
+      !(CodeGenOpts.SanitizeCfiCrossDso && !FD->hasBody() &&
+        !(getContext().GetGVALinkageForFunction(FD) ==
----------------
This is a little hard to read and probably needs to go back into a function 
with early returns. Sorry, my bad. I also think the logic for 
`available_externally` is wrong (please add a test case).

================
Comment at: lib/CodeGen/CodeGenModule.cpp:1011
@@ +1010,3 @@
+      uint64_t TypeId =
+          BuildCFICallSiteTypeId(dyn_cast<llvm::MDString>(MD)->getString());
+      llvm::Metadata *BitsetOps2[] = {
----------------
This isn't handling function types with internal linkage.

We can probably do this more consistently (e.g. by introducing a function that 
takes a `Metadata` from `CreateMetadataIdentifierForType` and returns a 
`ConstantInt` or `nullptr` if none suitable, and using it here, in callers of 
`EmitCfiSlowPathCheck` and in `CreateVTableBitSetEntry`).


Repository:
  rL LLVM

http://reviews.llvm.org/D15367



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

Reply via email to