lhames accepted this revision.
lhames added a comment.

Committed in r323163.



================
Comment at: Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp:2106
+// a vtable entry) from overloads (which require distinct entries).
+static bool isOverload(clang::CXXMethodDecl *m1, clang::CXXMethodDecl *m2) {
+  // FIXME: This should detect covariant return types, but currently doesn't.
----------------
clayborg wrote:
> I don't like things that can crash when asserts are off. I don't see why we 
> wouldn't just check this, If someone does pass in a method from on AST and 
> another from another AST, what will happen? Crash somewhere else? Why would 
> we risk crashing or misbehaving here when it is so easy to check and avoid. 
> I'll leave it at your discretion to do what you think is right though since I 
> know clang does this all over.
This can not crash unless someone has called it out-of-contract (like passing a 
nullptr into a routine that requires not-null). If user-input can cause a value 
that would have been used as a non-null argument to be null it should be 
guarded outside the method, not inside. I.e.:

  static void foo(Foo *f) {
    assert(f && "f must not be null");
    //...
  }

  auto *f = lookup(readline());
  if (!f)
    return; // Can't call foo without a valid f so bail out
  foo(f);

If you're passing something that can't be null, there's no need for the check:

  Foo* bar(); // Never returns null
  foo(bar()); // this is fine.

The case in this patch is like the latter: isOverload is called with two 
CXXMethodDecls, where the second was found via a lookup on a CXXRecordDecl that 
is on the same context as the first CXXMethodDecl. There's no intervening user 
input that could mess with that, so we're safe.


Repository:
  rL LLVM

https://reviews.llvm.org/D41997



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

Reply via email to