Merge pull request #64513 from zoecarver/revert-75dc69a81da07647bda2d1ccc3b82ce6e68b44a7

Revert 75dc69a81d
This commit is contained in:
Zoe Carver
2023-03-23 09:58:10 -07:00
committed by GitHub
4 changed files with 1 additions and 131 deletions

View File

@@ -42,8 +42,6 @@ class SwiftLookupTable;
class ValueDecl;
class VisibleDeclConsumer;
void dumpSwiftLookupTable(SwiftLookupTable *table);
/// Represents the different namespaces for types in C.
///
/// A simplified version of clang::Sema::LookupKind.

View File

@@ -6564,6 +6564,7 @@ CxxRecordSemanticsKind
CxxRecordSemantics::evaluate(Evaluator &evaluator,
CxxRecordSemanticsDescriptor desc) const {
const auto *decl = desc.decl;
auto &clangSema = desc.ctx.getClangModuleLoader()->getClangSema();
if (hasImportAsRefAttr(decl)) {
return CxxRecordSemanticsKind::Reference;

View File

@@ -2217,7 +2217,3 @@ SwiftNameLookupExtension::createExtensionReader(
// Return the new reader.
return std::move(tableReader);
}
void swift::dumpSwiftLookupTable(SwiftLookupTable *table) {
table->dump(llvm::dbgs());
}

View File

@@ -3817,131 +3817,6 @@ void MissingMemberFailure::diagnoseUnsafeCxxMethod(SourceLoc loc,
!isa_and_nonnull<clang::CXXRecordDecl>(
baseType->getAnyNominal()->getClangDecl()))
return;
if (name.getBaseIdentifier().str() == "getFromPointer" ||
name.getBaseIdentifier().str() == "isValid" ||
name.getBaseIdentifier().str() == "__dataUnsafe" ||
name.getBaseIdentifier().str() == "__getOpaquePointerValueUnsafe" ||
name.getBaseIdentifier().str() == "__getStartUnsafe" ||
name.getBaseIdentifier().str() == "__c_strUnsafe") {
// OK, we did not find a member that we probably should have.
// Dump the world.
llvm::dbgs() << "====================================================\n";
llvm::dbgs() << "====================================================\n\n";
llvm::dbgs() << "Hello! You have unfortuantly stubled across an interop bug that we have been trying to track down for a while. Please reach out to Zoe Carver and provide a link to this build. You can re-run this build and it should work next time. Sorry for the inconvience.\n\n";
llvm::dbgs() << "====================================================\n";
llvm::dbgs() << "====================================================\n\n";
llvm::dbgs() << "THE NAME: "; name.print(llvm::dbgs());
llvm::dbgs() << "====================================================\n";
llvm::dbgs() << "====================================================\n\n";
auto cxxRecord = cast<clang::CXXRecordDecl>(baseType->getAnyNominal()->getClangDecl());
llvm::dbgs() << "CXX RECORD: "; cxxRecord->dump();
llvm::dbgs() << "====================================================\n";
llvm::dbgs() << "====================================================\n\n";
auto dumpRedecls = [](const clang::CXXRecordDecl *cxxRecordToDump) {
llvm::dbgs() << "REDECLS:\n";
unsigned redeclIdx = 0;
for (auto redecl : cxxRecordToDump->redecls()) {
llvm::dbgs() << "REDECL(" << redeclIdx << "): "; redecl->dump();
redeclIdx++;
}
};
dumpRedecls(cxxRecord);
llvm::dbgs() << "====================================================\n";
llvm::dbgs() << "====================================================\n\n";
if (name.getBaseIdentifier().str() == "getFromPointer" ||
name.getBaseIdentifier().str() == "isValid") {
llvm::dbgs() << "LOOKUP UNSAFE VERSION:\n";
auto unsafeId =
ctx.getIdentifier("__" + name.getBaseIdentifier().str().str() + "Unsafe");
for (auto found :
baseType->getAnyNominal()->lookupDirect(DeclBaseName(unsafeId))) {
llvm::dbgs() << "**FOUND UNSAFE VERSION**\n";
llvm::dbgs() << "UNSAFE: ";
found->dump(llvm::dbgs());
if (auto cxxMethod = dyn_cast_or_null<clang::CXXMethodDecl>(found->getClangDecl())) {
llvm::dbgs() << "FOUND CXX METHOD.";
auto returnType = cxxMethod->getReturnType();
llvm::dbgs() << "CXX METHOD RETURN TYPE: ";
returnType->dump();
llvm::dbgs() << "CAN RETURN TYPE: ";
returnType->getCanonicalTypeUnqualified().dump();
if (auto recordType = dyn_cast<clang::RecordType>(returnType)) {
dumpRedecls(returnType->getAsCXXRecordDecl());
} else {
llvm::dbgs() << "NOT A RECORD TYPE\n";
}
}
}
} else {
std::string safeName;
if (name.getBaseIdentifier().str() == "__dataUnsafe")
safeName = "data";
if (name.getBaseIdentifier().str() == "__getOpaquePointerValueUnsafe")
safeName = "getOpaquePointerValue";
if (name.getBaseIdentifier().str() == "__getStartUnsafe")
safeName = "getStart";
if (name.getBaseIdentifier().str() == "__c_strUnsafe")
safeName = "c_str";
auto safeId = ctx.getIdentifier(safeName);
for (auto found :
baseType->getAnyNominal()->lookupDirect(DeclBaseName(safeId))) {
llvm::dbgs() << "**FOUND SAFE VERSION**\n";
llvm::dbgs() << "UNSAFE: ";
found->dump(llvm::dbgs());
if (auto cxxMethod = dyn_cast_or_null<clang::CXXMethodDecl>(found->getClangDecl())) {
llvm::dbgs() << "FOUND CXX METHOD.";
auto returnType = cxxMethod->getReturnType();
llvm::dbgs() << "CXX METHOD RETURN TYPE: ";
returnType->dump();
llvm::dbgs() << "CAN RETURN TYPE: ";
returnType->getCanonicalTypeUnqualified().dump();
if (auto recordType = dyn_cast<clang::RecordType>(returnType)) {
dumpRedecls(returnType->getAsCXXRecordDecl());
} else {
llvm::dbgs() << "NOT A RECORD TYPE\n";
}
}
}
}
llvm::dbgs() << "====================================================\n";
llvm::dbgs() << "====================================================\n\n";
llvm::dbgs() << "(IMPORTED) SWIFT TYPE: ";
baseType->dump(llvm::dbgs());
llvm::dbgs() << "(IMPORTED) SWIFT DECL: ";
baseType->getAnyNominal()->print(llvm::dbgs());
// And for my final trick, I will dump the whole lookup table.
llvm::dbgs() << "====================================================\n";
llvm::dbgs() << "====================================================\n\n";
llvm::dbgs() << "LOOKUP TABLE: ";
if (auto clangModule = cxxRecord->getOwningModule()) {
dumpSwiftLookupTable(ctx.getClangModuleLoader()->findLookupTable(clangModule));
} else {
llvm::dbgs() << "NO MODULE\n";
}
llvm::dbgs() << "====================================================\n";
llvm::dbgs() << "DBUG DUMP DONE\n";
llvm::dbgs() << "====================================================\n\n";
}
auto unsafeId =
ctx.getIdentifier("__" + name.getBaseIdentifier().str().str() + "Unsafe");