[llvm] [lldb] [lld] [openmp] [compiler-rt] [mlir] [libc] [clang-tools-extra] [clang] [libcxx] [flang] Make clang report invalid target versions for all environment types. (PR #78655)

Fangrui Song via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 2 12:52:20 PST 2024


================
@@ -1219,8 +1222,25 @@ VersionTuple Triple::getEnvironmentVersion() const {
 
 StringRef Triple::getEnvironmentVersionString() const {
   StringRef EnvironmentName = getEnvironmentName();
+
+  // none is a valid environment type - it basically amounts to a freestanding
+  // environment.
+  if (EnvironmentName == "none")
+    return "";
+
   StringRef EnvironmentTypeName = getEnvironmentTypeName(getEnvironment());
   EnvironmentName.consume_front(EnvironmentTypeName);
+
+  if (EnvironmentName.contains("-")) {
+    // -obj is the suffix
+    if (getObjectFormat() != Triple::UnknownObjectFormat) {
+      StringRef ObjectFormatTypeName =
+          getObjectFormatTypeName(getObjectFormat());
+      const std::string &tmp = (Twine("-") + ObjectFormatTypeName).str();
----------------
MaskRay wrote:

Just use `const std::string`. The lifetime extension due to `const &` is subtle and fragile, and does not give any benefit here.

https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary
https://abseil.io/tips/107

Then `EnvironmentName.consume_back(tmp);`

Avoid the used-once `StringRef Suffix = tmp;`

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


More information about the cfe-commits mailing list