erichkeane added a comment.

Tighten up the 'IUnknown' check, and do the check I mentioned above, and I 
think this logic is correct.  Searching would be required in the positive case, 
but this is the negative case.



================
Comment at: lib/Sema/SemaDeclCXX.cpp:2483
+            !IsDeclPublicInterface(RD, KnownBase->getAccessSpecifier()) &&
+            !IsOrInheritsFromIUnknown(RD)) {
           Diag(KnownBase->getLocStart(), diag::err_invalid_base_in_interface)
----------------
So, I just realized... this call here is useless, we got sidetracked because of 
the inversion of logic here.  You ACTUALLY just care that this base is either a 
public interface, OR if it is IUnknown.  This logic can be:

   if (Class->isInterface() && !IsDeclPublicInterface(...) && 
!IsIUnknownType(...)) {...}

The search doesn't actually need to take place, since the current base COULD 
NOT be a valid 'interface' unless it inherited only from interfaces/IUnknown 
anyway.  Unless I'm missing something, you can delete the function 
"IsOrInheritsFromIUnknown" as well.


https://reviews.llvm.org/D37308



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

Reply via email to