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

>From 9a733c05d8ab18c1a7c45fc159718994a544f722 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida <cyndy_ish...@apple.com>
Date: Fri, 9 May 2025 12:16:14 -0700
Subject: [PATCH 1/2] [llvm][Support] Avoid setting minor/subminor/build in
 VersionTuple::withMajorReplaced

The expectation of this API is to only change the major version of a
preexisting version tuple. However, it was actually adding 0's which
causes unintended changes in serialization or printing.

Instead, check for the existing of the non-major parts of the tuple.
---
 llvm/include/llvm/Support/VersionTuple.h    |  4 +--
 llvm/lib/Support/VersionTuple.cpp           | 10 +++++++
 llvm/unittests/Support/VersionTupleTest.cpp | 30 +++++++++++++++++++++
 3 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/llvm/include/llvm/Support/VersionTuple.h 
b/llvm/include/llvm/Support/VersionTuple.h
index 0a4623f049d28..aeb4798209203 100644
--- a/llvm/include/llvm/Support/VersionTuple.h
+++ b/llvm/include/llvm/Support/VersionTuple.h
@@ -100,9 +100,7 @@ class VersionTuple {
 
   /// Return a version tuple that contains a different major version but
   /// everything else is the same.
-  VersionTuple withMajorReplaced(unsigned NewMajor) const {
-    return VersionTuple(NewMajor, Minor, Subminor, Build);
-  }
+  VersionTuple withMajorReplaced(unsigned NewMajor) const;
 
   /// Return a version tuple that contains only components that are non-zero.
   VersionTuple normalize() const {
diff --git a/llvm/lib/Support/VersionTuple.cpp 
b/llvm/lib/Support/VersionTuple.cpp
index a4224f23b2f94..c6e20f1bd3ef4 100644
--- a/llvm/lib/Support/VersionTuple.cpp
+++ b/llvm/lib/Support/VersionTuple.cpp
@@ -108,3 +108,13 @@ bool VersionTuple::tryParse(StringRef input) {
   *this = VersionTuple(major, minor, micro, build);
   return false;
 }
+
+VersionTuple VersionTuple::withMajorReplaced(unsigned NewMajor) const {
+  if (HasBuild)
+    return VersionTuple(NewMajor, Minor, Subminor, Build);
+  if (HasSubminor)
+    return VersionTuple(NewMajor, Minor, Subminor);
+  if (HasMinor)
+    return VersionTuple(NewMajor, Minor);
+  return VersionTuple(NewMajor);
+}
diff --git a/llvm/unittests/Support/VersionTupleTest.cpp 
b/llvm/unittests/Support/VersionTupleTest.cpp
index af6c0a7febad5..d498d670fb710 100644
--- a/llvm/unittests/Support/VersionTupleTest.cpp
+++ b/llvm/unittests/Support/VersionTupleTest.cpp
@@ -47,3 +47,33 @@ TEST(VersionTuple, tryParse) {
   EXPECT_TRUE(VT.tryParse("1 "));
   EXPECT_TRUE(VT.tryParse("."));
 }
+
+TEST(VersionTuple, withMajorReplaced) {
+  VersionTuple VT(2);
+  VersionTuple ReplacedVersion = VT.withMajorReplaced(7);
+  EXPECT_FALSE(ReplacedVersion.getMinor().has_value());
+  EXPECT_FALSE(ReplacedVersion.getSubminor().has_value());
+  EXPECT_FALSE(ReplacedVersion.getBuild().has_value());
+  EXPECT_EQ(VersionTuple(7), ReplacedVersion);
+
+  VT = VersionTuple(100, 1);
+  ReplacedVersion = VT.withMajorReplaced(7);
+  EXPECT_TRUE(ReplacedVersion.getMinor().has_value());
+  EXPECT_FALSE(ReplacedVersion.getSubminor().has_value());
+  EXPECT_FALSE(ReplacedVersion.getBuild().has_value());
+  EXPECT_EQ(VersionTuple(7, 1), ReplacedVersion);
+
+  VT = VersionTuple(101, 11, 12);
+  ReplacedVersion = VT.withMajorReplaced(7);
+  EXPECT_TRUE(ReplacedVersion.getMinor().has_value());
+  EXPECT_TRUE(ReplacedVersion.getSubminor().has_value());
+  EXPECT_FALSE(ReplacedVersion.getBuild().has_value());
+  EXPECT_EQ(VersionTuple(7, 11, 12), ReplacedVersion);
+
+  VT = VersionTuple(101, 11, 12, 2);
+  ReplacedVersion = VT.withMajorReplaced(7);
+  EXPECT_TRUE(ReplacedVersion.getMinor().has_value());
+  EXPECT_TRUE(ReplacedVersion.getSubminor().has_value());
+  EXPECT_TRUE(ReplacedVersion.getBuild().has_value());
+  EXPECT_EQ(VersionTuple(7, 11, 12, 2), ReplacedVersion);
+}

>From 19e91ecc893129ac34802d74853d97169838f651 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida <cyndy_ish...@apple.com>
Date: Fri, 9 May 2025 12:58:40 -0700
Subject: [PATCH 2/2] Fix tests

---
 clang/test/Driver/xros-driver.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/test/Driver/xros-driver.c b/clang/test/Driver/xros-driver.c
index dd2c55ed4e70c..a79b76d5fe0ba 100644
--- a/clang/test/Driver/xros-driver.c
+++ b/clang/test/Driver/xros-driver.c
@@ -30,8 +30,8 @@
 // LINK: "-platform_version" "xros" "1.0.0" "1.0.0"
 // LINK-SIM: "-platform_version" "xros-simulator" "1.0.0" "1.0.0"
 
-// OBJC-RUNTIME: "-fobjc-runtime=ios-17.0.0.0"
-// OBJC-RUNTIME2: "-fobjc-runtime=ios-18.0.0.0"
+// OBJC-RUNTIME: "-fobjc-runtime=ios-17.0.0"
+// OBJC-RUNTIME2: "-fobjc-runtime=ios-18.0.0"
 // ARC-NOT: error:
 
 // SSP_ON: "-stack-protector" "1"

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to