================ @@ -588,13 +622,58 @@ void DylibVerifier::visitSymbolInDylib(const Record &R, SymbolContext &SymCtx) { } } + const bool IsLinkerSymbol = SymbolName.starts_with("$ld$"); + + if (R.isVerified()) { + // Check for unavailable symbols. + // This should only occur in the zippered case where we ignored + // availability until all headers have been parsed. + auto It = DeferredZipperedSymbols.find(SymCtx.SymbolName); + if (It == DeferredZipperedSymbols.end()) { + updateState(Result::Valid); + return; + } + + ZipperedDeclSources Locs; + for (const ZipperedDeclSource &ZSource : It->second) { + if (ZSource.FA->Avail.isObsoleted()) { + updateState(Result::Ignore); + return; + } + if (ZSource.T.Arch != Ctx.Target.Arch) + continue; + Locs.emplace_back(ZSource); + } + assert(Locs.size() == 2 && "Expected two decls for zippered symbol"); ---------------- cyndyishida wrote:
My thinking at this point is that the only kind of error is when every version of the decl look unavailable (no decl at all/only one available decl are handled separately). Because this check is handled after all CC1 invocations have finished, any macro-guarded declarations should have been resolved and show 2. e.g. ``` #if defined(TARGET_OS_OSX) && TARGET_OS_OSX extern int unavailableSymbol API_UNAVAILABLE(macos) ; #else extern int unavailableSymbol API_UNAVAILABLE(macCatalyst); #endif ``` results in ``` warning: violations found for arm64-apple-macos13 /Users/cishida/Builds/llvm-build/tools/clang/test/InstallAPI/Output/diagnostics-zippered.test.tmp/System/Library/Frameworks/Mismatch.framework/Headers/Mismatch.h:16:5: error: declaration 'unavailableSymbol' is marked unavailable, but symbol is exported in dynamic library 16 | int unavailableSymbol API_UNAVAILABLE(macos) ; | ^ warning: violations found for arm64-apple-ios16.0-macabi /Users/cishida/Builds/llvm-build/tools/clang/test/InstallAPI/Output/diagnostics-zippered.test.tmp/System/Library/Frameworks/Mismatch.framework/Headers/Mismatch.h:18:5: error: declaration 'unavailableSymbol' is marked unavailable, but symbol is exported in dynamic library 18 | int unavailableSymbol API_UNAVAILABLE(macCatalyst); | ^ ``` Were you thinking of a different example? https://github.com/llvm/llvm-project/pull/88205 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits