[clang] [clang][ExtractAPI] Record availability information only for the target platform (PR #76823)

via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 3 06:52:12 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Sofía Rodríguez (sofiaromorales)

<details>
<summary>Changes</summary>

Currently, ExtractAPI provides availability information for all platforms within a given domain. With this change, we narrow down the output to include availability details only for the specified target platform, so users can generate the symbol graph with only the availability information they need, omitting information of the other platforms.

This change reverts the functionality introduced in [`57c9780`](https://github.com/llvm/llvm-project/commit/57c9780).

rdar://120419037


---
Full diff: https://github.com/llvm/llvm-project/pull/76823.diff


2 Files Affected:

- (modified) clang/lib/ExtractAPI/AvailabilityInfo.cpp (+8) 
- (modified) clang/test/ExtractAPI/availability.c (-20) 


``````````diff
diff --git a/clang/lib/ExtractAPI/AvailabilityInfo.cpp b/clang/lib/ExtractAPI/AvailabilityInfo.cpp
index 1df852fdbf9304..0c578de227ade1 100644
--- a/clang/lib/ExtractAPI/AvailabilityInfo.cpp
+++ b/clang/lib/ExtractAPI/AvailabilityInfo.cpp
@@ -1,11 +1,17 @@
 #include "clang/ExtractAPI/AvailabilityInfo.h"
 #include "clang/AST/Attr.h"
 #include "llvm/ADT/STLExtras.h"
+#include "clang/AST/ASTContext.h"
+#include "clang/Basic/TargetInfo.h"
 
 using namespace clang;
 using namespace extractapi;
 
 AvailabilitySet::AvailabilitySet(const Decl *Decl) {
+    
+  ASTContext &Context = Decl->getASTContext();
+  StringRef PlatformName = Context.getTargetInfo().getPlatformName();
+    
   // Collect availability attributes from all redeclrations.
   for (const auto *RD : Decl->redecls()) {
     if (const auto *A = RD->getAttr<UnavailableAttr>()) {
@@ -24,6 +30,8 @@ AvailabilitySet::AvailabilitySet(const Decl *Decl) {
 
     for (const auto *Attr : RD->specific_attrs<AvailabilityAttr>()) {
       StringRef Domain = Attr->getPlatform()->getName();
+      if (Domain != PlatformName)
+        continue;
       auto *Availability =
           llvm::find_if(Availabilities, [Domain](const AvailabilityInfo &Info) {
             return Domain.equals(Info.Domain);
diff --git a/clang/test/ExtractAPI/availability.c b/clang/test/ExtractAPI/availability.c
index 4bda94ba7c2bf9..3c1ef5c45b634d 100644
--- a/clang/test/ExtractAPI/availability.c
+++ b/clang/test/ExtractAPI/availability.c
@@ -300,22 +300,6 @@ void e(void) __attribute__((availability(tvos, unavailable)));
             "minor": 0,
             "patch": 0
           }
-        },
-        {
-          "domain": "ios",
-          "introduced": {
-            "major": 13,
-            "minor": 0,
-            "patch": 0
-          }
-        },
-        {
-          "domain": "tvos",
-          "introduced": {
-            "major": 15,
-            "minor": 0,
-            "patch": 0
-          }
         }
       ],
       "declarationFragments": [
@@ -394,10 +378,6 @@ void e(void) __attribute__((availability(tvos, unavailable)));
             "minor": 0,
             "patch": 0
           }
-        },
-        {
-          "domain": "tvos",
-          "isUnconditionallyUnavailable": true
         }
       ],
       "declarationFragments": [

``````````

</details>


https://github.com/llvm/llvm-project/pull/76823


More information about the cfe-commits mailing list