================
@@ -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

Reply via email to