[clang] [clang] Upstream visionOS Availability & DarwinSDKInfo APIs (PR #84279)

2024-03-07 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida closed 
https://github.com/llvm/llvm-project/pull/84279
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Upstream visionOS Availability & DarwinSDKInfo APIs (PR #84279)

2024-03-07 Thread Juergen Ributzka via cfe-commits

https://github.com/ributzka approved this pull request.


https://github.com/llvm/llvm-project/pull/84279
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Upstream visionOS Availability & DarwinSDKInfo APIs (PR #84279)

2024-03-07 Thread Jonas Devlieghere via cfe-commits

https://github.com/JDevlieghere approved this pull request.

LGTM

https://github.com/llvm/llvm-project/pull/84279
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Upstream visionOS Availability & DarwinSDKInfo APIs (PR #84279)

2024-03-06 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida updated 
https://github.com/llvm/llvm-project/pull/84279

>From 777edd2803f87308a6eb4119aacca792a8c62672 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida 
Date: Wed, 6 Mar 2024 20:29:30 -0800
Subject: [PATCH 1/2] [clang] Support availability annotations for visionOS

Admittently a bit awkward, `visionos` is the correct and accepted
spelling for annotating availability for xros target triples. This patch
detects errors and handles cases when `xros` is mistakenly passed.
---
 clang/include/clang/Basic/Attr.td |  8 
 clang/lib/Parse/ParseDecl.cpp |  5 ++-
 clang/lib/Parse/ParseExpr.cpp |  3 +-
 .../test/CodeGen/attr-availability-visionos.c | 10 +
 clang/test/Sema/attr-availability-visionos.c  | 39 +++
 5 files changed, 63 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/CodeGen/attr-availability-visionos.c
 create mode 100644 clang/test/Sema/attr-availability-visionos.c

diff --git a/clang/include/clang/Basic/Attr.td 
b/clang/include/clang/Basic/Attr.td
index fa191c7378dba4..ebb616fbe253fc 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -983,6 +983,8 @@ def Availability : InheritableAttr {
  .Case("watchos_app_extension", "watchOS (App Extension)")
  .Case("maccatalyst", "macCatalyst")
  .Case("maccatalyst_app_extension", "macCatalyst (App Extension)")
+ .Case("xros", "visionOS")
+ .Case("xros_app_extension", "visionOS (App Extension)")
  .Case("swift", "Swift")
  .Case("shadermodel", "HLSL ShaderModel")
  .Case("ohos", "OpenHarmony OS")
@@ -1000,6 +1002,8 @@ static llvm::StringRef 
getPlatformNameSourceSpelling(llvm::StringRef Platform) {
  .Case("watchos_app_extension", "watchOSApplicationExtension")
  .Case("maccatalyst", "macCatalyst")
  .Case("maccatalyst_app_extension", 
"macCatalystApplicationExtension")
+ .Case("xros", "visionOS")
+ .Case("xros_app_extension", "visionOSApplicationExtension")
  .Case("zos", "z/OS")
  .Case("shadermodel", "ShaderModel")
  .Default(Platform);
@@ -1016,6 +1020,10 @@ static llvm::StringRef 
canonicalizePlatformName(llvm::StringRef Platform) {
  .Case("watchOSApplicationExtension", "watchos_app_extension")
  .Case("macCatalyst", "maccatalyst")
  .Case("macCatalystApplicationExtension", 
"maccatalyst_app_extension")
+ .Case("visionOS", "xros")
+ .Case("visionOSApplicationExtension", "xros_app_extension")
+ .Case("visionos", "xros")
+ .Case("visionos_app_extension", "xros_app_extension")
  .Case("ShaderModel", "shadermodel")
  .Default(Platform);
 } }];
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 81f1c711269445..ee377b70964a28 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -1234,8 +1234,11 @@ void Parser::ParseAvailabilityAttribute(
   }
   IdentifierLoc *Platform = ParseIdentifierLoc();
   if (const IdentifierInfo *const Ident = Platform->Ident) {
+// Disallow xrOS for availability attributes.
+if (Ident->getName().contains("xrOS") || Ident->getName().contains("xros"))
+  Diag(Platform->Loc, diag::warn_availability_unknown_platform) << Ident;
 // Canonicalize platform name from "macosx" to "macos".
-if (Ident->getName() == "macosx")
+else if (Ident->getName() == "macosx")
   Platform->Ident = PP.getIdentifierInfo("macos");
 // Canonicalize platform name from "macosx_app_extension" to
 // "macos_app_extension".
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 4bf954b5cc4db5..1f07eddb0fb378 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp
@@ -3863,7 +3863,8 @@ std::optional 
Parser::ParseAvailabilitySpec() {
 StringRef Platform =
 AvailabilityAttr::canonicalizePlatformName(GivenPlatform);
 
-if (AvailabilityAttr::getPrettyPlatformName(Platform).empty()) {
+if (AvailabilityAttr::getPrettyPlatformName(Platform).empty() ||
+(GivenPlatform.contains("xros") || GivenPlatform.contains("xrOS"))) {
   Diag(PlatformIdentifier->Loc,
diag::err_avail_query_unrecognized_platform_name)
   << GivenPlatform;
diff --git a/clang/test/CodeGen/attr-availability-visionos.c 
b/clang/test/CodeGen/attr-availability-visionos.c
new file mode 100644
index 00..09b98fb4a7d5e3
--- /dev/null
+++ b/clang/test/CodeGen/attr-availability-visionos.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple arm64-apple-xros1 -emit-llvm -o - %s 2>&1 | 
FileCheck %s
+
+__attribute__((availability(visionOS, introduced=1.1)))
+void introduced_1_1();
+
+void use() {
+  if (__builtin_available(visionOS 1.2, *))
+introduced_1_1();
+  // CHECK: call i32 

[clang] [clang] Upstream visionOS Availability & DarwinSDKInfo APIs (PR #84279)

2024-03-06 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang

Author: Cyndy Ishida (cyndyishida)


Changes

Admittedly a bit awkward, `visionos` is the correct and accepted spelling for 
annotating availability for xrOS target triples. This patch detects errors and 
handles cases when `xros` is mistakenly passed. 
In addition, add APIs for introduced/deprecated/obsoleted versioning in 
DarwinSDKInfo mappings.

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


6 Files Affected:

- (modified) clang/include/clang/Basic/Attr.td (+8) 
- (modified) clang/include/clang/Basic/DarwinSDKInfo.h (+24) 
- (modified) clang/lib/Parse/ParseDecl.cpp (+4-1) 
- (modified) clang/lib/Parse/ParseExpr.cpp (+2-1) 
- (added) clang/test/Sema/attr-availability-visionos.c (+39) 
- (modified) clang/unittests/Basic/DarwinSDKInfoTest.cpp (+10) 


``diff
diff --git a/clang/include/clang/Basic/Attr.td 
b/clang/include/clang/Basic/Attr.td
index fa191c7378dba4..ebb616fbe253fc 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -983,6 +983,8 @@ def Availability : InheritableAttr {
  .Case("watchos_app_extension", "watchOS (App Extension)")
  .Case("maccatalyst", "macCatalyst")
  .Case("maccatalyst_app_extension", "macCatalyst (App Extension)")
+ .Case("xros", "visionOS")
+ .Case("xros_app_extension", "visionOS (App Extension)")
  .Case("swift", "Swift")
  .Case("shadermodel", "HLSL ShaderModel")
  .Case("ohos", "OpenHarmony OS")
@@ -1000,6 +1002,8 @@ static llvm::StringRef 
getPlatformNameSourceSpelling(llvm::StringRef Platform) {
  .Case("watchos_app_extension", "watchOSApplicationExtension")
  .Case("maccatalyst", "macCatalyst")
  .Case("maccatalyst_app_extension", 
"macCatalystApplicationExtension")
+ .Case("xros", "visionOS")
+ .Case("xros_app_extension", "visionOSApplicationExtension")
  .Case("zos", "z/OS")
  .Case("shadermodel", "ShaderModel")
  .Default(Platform);
@@ -1016,6 +1020,10 @@ static llvm::StringRef 
canonicalizePlatformName(llvm::StringRef Platform) {
  .Case("watchOSApplicationExtension", "watchos_app_extension")
  .Case("macCatalyst", "maccatalyst")
  .Case("macCatalystApplicationExtension", 
"maccatalyst_app_extension")
+ .Case("visionOS", "xros")
+ .Case("visionOSApplicationExtension", "xros_app_extension")
+ .Case("visionos", "xros")
+ .Case("visionos_app_extension", "xros_app_extension")
  .Case("ShaderModel", "shadermodel")
  .Default(Platform);
 } }];
diff --git a/clang/include/clang/Basic/DarwinSDKInfo.h 
b/clang/include/clang/Basic/DarwinSDKInfo.h
index dedfbd934a7b63..db20b968a898ea 100644
--- a/clang/include/clang/Basic/DarwinSDKInfo.h
+++ b/clang/include/clang/Basic/DarwinSDKInfo.h
@@ -105,6 +105,30 @@ class DarwinSDKInfo {
 map(const VersionTuple , const VersionTuple ,
 std::optional MaximumValue) const;
 
+/// Remap the 'introduced' availability version.
+/// If None is returned, the 'unavailable' availability should be used
+/// instead.
+std::optional
+mapIntroducedAvailabilityVersion(const VersionTuple ) const {
+  // API_TO_BE_DEPRECATED is 10.
+  if (Key.getMajor() == 10)
+return VersionTuple(10);
+  // Use None for maximum to force unavailable behavior for
+  return map(Key, MinimumValue, std::nullopt);
+}
+
+/// Remap the 'deprecated' and 'obsoleted' availability version.
+/// If None is returned for 'obsoleted', the 'unavailable' availability
+/// should be used instead. If None is returned for 'deprecated', the
+/// 'deprecated' version should be dropped.
+std::optional
+mapDeprecatedObsoletedAvailabilityVersion(const VersionTuple ) const {
+  // API_TO_BE_DEPRECATED is 10.
+  if (Key.getMajor() == 10)
+return VersionTuple(10);
+  return map(Key, MinimumValue, MaximumValue);
+}
+
 static std::optional
 parseJSON(const llvm::json::Object ,
   VersionTuple MaximumDeploymentTarget);
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 81f1c711269445..ee377b70964a28 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -1234,8 +1234,11 @@ void Parser::ParseAvailabilityAttribute(
   }
   IdentifierLoc *Platform = ParseIdentifierLoc();
   if (const IdentifierInfo *const Ident = Platform->Ident) {
+// Disallow xrOS for availability attributes.
+if (Ident->getName().contains("xrOS") || Ident->getName().contains("xros"))
+  Diag(Platform->Loc, diag::warn_availability_unknown_platform) << Ident;
 // Canonicalize platform name from "macosx" to "macos".
-if (Ident->getName() == "macosx")
+else if (Ident->getName() == "macosx")
   

[clang] [clang] Upstream visionOS Availability & DarwinSDKInfo APIs (PR #84279)

2024-03-06 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida created 
https://github.com/llvm/llvm-project/pull/84279

Admittedly a bit awkward, `visionos` is the correct and accepted spelling for 
annotating availability for xrOS target triples. This patch detects errors and 
handles cases when `xros` is mistakenly passed. 
In addition, add APIs for introduced/deprecated/obsoleted versioning in 
DarwinSDKInfo mappings.

>From 64ff809b6325c9b6d4f957c9bbc2d9ffc83eaa15 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida 
Date: Wed, 6 Mar 2024 20:29:30 -0800
Subject: [PATCH 1/2] [clang] Support availability annotations for visionOS

Admittently a bit awkward, `visionos` is the correct and accepted
spelling for annotating availability for xros target triples. This patch
detects errors and handles cases when `xros` is mistakenly passed.
---
 clang/include/clang/Basic/Attr.td|  8 
 clang/lib/Parse/ParseDecl.cpp|  5 ++-
 clang/lib/Parse/ParseExpr.cpp|  3 +-
 clang/test/Sema/attr-availability-visionos.c | 39 
 4 files changed, 53 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/Sema/attr-availability-visionos.c

diff --git a/clang/include/clang/Basic/Attr.td 
b/clang/include/clang/Basic/Attr.td
index fa191c7378dba4..ebb616fbe253fc 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -983,6 +983,8 @@ def Availability : InheritableAttr {
  .Case("watchos_app_extension", "watchOS (App Extension)")
  .Case("maccatalyst", "macCatalyst")
  .Case("maccatalyst_app_extension", "macCatalyst (App Extension)")
+ .Case("xros", "visionOS")
+ .Case("xros_app_extension", "visionOS (App Extension)")
  .Case("swift", "Swift")
  .Case("shadermodel", "HLSL ShaderModel")
  .Case("ohos", "OpenHarmony OS")
@@ -1000,6 +1002,8 @@ static llvm::StringRef 
getPlatformNameSourceSpelling(llvm::StringRef Platform) {
  .Case("watchos_app_extension", "watchOSApplicationExtension")
  .Case("maccatalyst", "macCatalyst")
  .Case("maccatalyst_app_extension", 
"macCatalystApplicationExtension")
+ .Case("xros", "visionOS")
+ .Case("xros_app_extension", "visionOSApplicationExtension")
  .Case("zos", "z/OS")
  .Case("shadermodel", "ShaderModel")
  .Default(Platform);
@@ -1016,6 +1020,10 @@ static llvm::StringRef 
canonicalizePlatformName(llvm::StringRef Platform) {
  .Case("watchOSApplicationExtension", "watchos_app_extension")
  .Case("macCatalyst", "maccatalyst")
  .Case("macCatalystApplicationExtension", 
"maccatalyst_app_extension")
+ .Case("visionOS", "xros")
+ .Case("visionOSApplicationExtension", "xros_app_extension")
+ .Case("visionos", "xros")
+ .Case("visionos_app_extension", "xros_app_extension")
  .Case("ShaderModel", "shadermodel")
  .Default(Platform);
 } }];
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index 81f1c711269445..ee377b70964a28 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -1234,8 +1234,11 @@ void Parser::ParseAvailabilityAttribute(
   }
   IdentifierLoc *Platform = ParseIdentifierLoc();
   if (const IdentifierInfo *const Ident = Platform->Ident) {
+// Disallow xrOS for availability attributes.
+if (Ident->getName().contains("xrOS") || Ident->getName().contains("xros"))
+  Diag(Platform->Loc, diag::warn_availability_unknown_platform) << Ident;
 // Canonicalize platform name from "macosx" to "macos".
-if (Ident->getName() == "macosx")
+else if (Ident->getName() == "macosx")
   Platform->Ident = PP.getIdentifierInfo("macos");
 // Canonicalize platform name from "macosx_app_extension" to
 // "macos_app_extension".
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 4bf954b5cc4db5..1f07eddb0fb378 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp
@@ -3863,7 +3863,8 @@ std::optional 
Parser::ParseAvailabilitySpec() {
 StringRef Platform =
 AvailabilityAttr::canonicalizePlatformName(GivenPlatform);
 
-if (AvailabilityAttr::getPrettyPlatformName(Platform).empty()) {
+if (AvailabilityAttr::getPrettyPlatformName(Platform).empty() ||
+(GivenPlatform.contains("xros") || GivenPlatform.contains("xrOS"))) {
   Diag(PlatformIdentifier->Loc,
diag::err_avail_query_unrecognized_platform_name)
   << GivenPlatform;
diff --git a/clang/test/Sema/attr-availability-visionos.c 
b/clang/test/Sema/attr-availability-visionos.c
new file mode 100644
index 00..2c388c5d529073
--- /dev/null
+++ b/clang/test/Sema/attr-availability-visionos.c
@@ -0,0 +1,39 @@
+// RUN: %clang_cc1 -triple arm64-apple-xros1 -fapplication-extension 
-verify=visionos %s 2>&1
+