[clang] [clang][ExtractAPI] Allow serialization for ObjC++ headers (PR #74733)

Daniel Grumberg via cfe-commits cfe-commits at lists.llvm.org
Thu Dec 7 08:30:04 PST 2023


https://github.com/daniel-grumberg created https://github.com/llvm/llvm-project/pull/74733

rdar://79874441

>From 87d6b0fca621bae69102161fa4c3ebc003ae27bc Mon Sep 17 00:00:00 2001
From: Daniel Grumberg <dgrumberg at apple.com>
Date: Thu, 7 Dec 2023 14:52:47 +0000
Subject: [PATCH] [clang][ExtractAPI] Allow serialization for ObjC++ headers

rdar://79874441
---
 .../Serialization/SymbolGraphSerializer.cpp   |   3 +-
 clang/test/ExtractAPI/language.c              | 101 +++++++++++++++++-
 2 files changed, 101 insertions(+), 3 deletions(-)

diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
index 931933b2bd1ac..d9675b0c94de3 100644
--- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -199,9 +199,10 @@ StringRef getLanguageName(Language Lang) {
     return "objective-c";
   case Language::CXX:
     return "c++";
+  case Language::ObjCXX:
+    return "objective-c++";
 
   // Unsupported language currently
-  case Language::ObjCXX:
   case Language::OpenCL:
   case Language::OpenCLCXX:
   case Language::CUDA:
diff --git a/clang/test/ExtractAPI/language.c b/clang/test/ExtractAPI/language.c
index 6facd18f5d981..fe98626c84613 100644
--- a/clang/test/ExtractAPI/language.c
+++ b/clang/test/ExtractAPI/language.c
@@ -4,29 +4,42 @@
 // RUN: %t/c.reference.output.json.in >> %t/c.reference.output.json
 // RUN: sed -e "s at INPUT_DIR@%{/t:regex_replacement}@g" \
 // RUN: %t/objc.reference.output.json.in >> %t/objc.reference.output.json
+// RUN: sed -e "s at INPUT_DIR@%{/t:regex_replacement}@g" \
+// RUN: %t/objcpp.reference.output.json.in >> %t/objcpp.reference.output.json
 
-// RUN: %clang -extract-api -x c-header -target arm64-apple-macosx \
+// RUN: %clang_cc1 -extract-api -x c-header -triple arm64-apple-macosx \
 // RUN: %t/c.h -o %t/c.output.json | FileCheck -allow-empty %s
-// RUN: %clang -extract-api -x objective-c-header -target arm64-apple-macosx \
+// RUN: %clang_cc1 -extract-api -x objective-c-header -triple arm64-apple-macosx \
 // RUN: %t/objc.h -o %t/objc.output.json | FileCheck -allow-empty %s
+// RUN: %clang_cc1 -extract-api -x objective-c++-header -triple arm64-apple-macosx \
+// RUN: %t/objcpp.h -o %t/objcpp.output.json | FileCheck -allow-empty %s
 
 // Generator version is not consistent across test runs, normalize it.
 // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
 // RUN: %t/c.output.json >> %t/c.output-normalized.json
 // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
 // RUN: %t/objc.output.json >> %t/objc.output-normalized.json
+// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
+// RUN: %t/objcpp.output.json >> %t/objcpp.output-normalized.json
 
 // RUN: diff %t/c.reference.output.json %t/c.output-normalized.json
 // RUN: diff %t/objc.reference.output.json %t/objc.output-normalized.json
+// RUN: diff %t/objcpp.reference.output.json %t/objcpp.output-normalized.json
 
 // CHECK-NOT: error:
 // CHECK-NOT: warning:
 
 //--- c.h
 char c;
+///expected-no-diagnostics
 
 //--- objc.h
 char objc;
+///expected-no-diagnostics
+
+//--- objcpp.h
+char objcpp;
+///expected-no-diagnostics
 
 //--- c.reference.output.json.in
 {
@@ -196,3 +209,87 @@ char objc;
     }
   ]
 }
+//--- objcpp.reference.output.json.in
+{
+  "metadata": {
+    "formatVersion": {
+      "major": 0,
+      "minor": 5,
+      "patch": 3
+    },
+    "generator": "?"
+  },
+  "module": {
+    "name": "",
+    "platform": {
+      "architecture": "arm64",
+      "operatingSystem": {
+        "minimumVersion": {
+          "major": 11,
+          "minor": 0,
+          "patch": 0
+        },
+        "name": "macosx"
+      },
+      "vendor": "apple"
+    }
+  },
+  "relationships": [],
+  "symbols": [
+    {
+      "accessLevel": "public",
+      "declarationFragments": [
+        {
+          "kind": "typeIdentifier",
+          "preciseIdentifier": "c:C",
+          "spelling": "char"
+        },
+        {
+          "kind": "text",
+          "spelling": " "
+        },
+        {
+          "kind": "identifier",
+          "spelling": "objcpp"
+        },
+        {
+          "kind": "text",
+          "spelling": ";"
+        }
+      ],
+      "identifier": {
+        "interfaceLanguage": "objective-c++",
+        "precise": "c:@objcpp"
+      },
+      "kind": {
+        "displayName": "Global Variable",
+        "identifier": "objective-c++.var"
+      },
+      "location": {
+        "position": {
+          "character": 5,
+          "line": 0
+        },
+        "uri": "file://INPUT_DIR/objcpp.h"
+      },
+      "names": {
+        "navigator": [
+          {
+            "kind": "identifier",
+            "spelling": "objcpp"
+          }
+        ],
+        "subHeading": [
+          {
+            "kind": "identifier",
+            "spelling": "objcpp"
+          }
+        ],
+        "title": "objcpp"
+      },
+      "pathComponents": [
+        "objcpp"
+      ]
+    }
+  ]
+}



More information about the cfe-commits mailing list