Author: Timm Bäder
Date: 2025-03-25T07:15:30+01:00
New Revision: 1e2ad6793ac205607e7c809283cf69e1cc36a69a

URL: 
https://github.com/llvm/llvm-project/commit/1e2ad6793ac205607e7c809283cf69e1cc36a69a
DIFF: 
https://github.com/llvm/llvm-project/commit/1e2ad6793ac205607e7c809283cf69e1cc36a69a.diff

LOG: Revert "[clang][bytecode] Implement __builtin_{wcscmp,wcsncmp} (#132723)"

This reverts commit f7aea4d081f77dba48b0fc019f59b678fb679aa8.

This broke the clang-solaris11-sparcv9 builder:
https://lab.llvm.org/buildbot/#/builders/13/builds/6151

Added: 
    

Modified: 
    clang/lib/AST/ByteCode/InterpBuiltin.cpp
    clang/test/AST/ByteCode/builtin-functions.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp 
b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index 5ea1d36a148ae..285ea7151a9cf 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -212,13 +212,11 @@ static bool interp__builtin_strcmp(InterpState &S, 
CodePtr OpPC,
   const Pointer &A = getParam<Pointer>(Frame, 0);
   const Pointer &B = getParam<Pointer>(Frame, 1);
 
-  if (ID == Builtin::BIstrcmp || ID == Builtin::BIstrncmp ||
-      ID == Builtin::BIwcscmp || ID == Builtin::BIwcsncmp)
+  if (ID == Builtin::BIstrcmp || ID == Builtin::BIstrncmp)
     diagnoseNonConstexprBuiltin(S, OpPC, ID);
 
   uint64_t Limit = ~static_cast<uint64_t>(0);
-  if (ID == Builtin::BIstrncmp || ID == Builtin::BI__builtin_strncmp ||
-      ID == Builtin::BIwcsncmp || ID == Builtin::BI__builtin_wcsncmp)
+  if (ID == Builtin::BIstrncmp || ID == Builtin::BI__builtin_strncmp)
     Limit = peekToAPSInt(S.Stk, *S.getContext().classify(Call->getArg(2)))
                 .getZExtValue();
 
@@ -233,9 +231,6 @@ static bool interp__builtin_strcmp(InterpState &S, CodePtr 
OpPC,
   if (A.isDummy() || B.isDummy())
     return false;
 
-  bool IsWide = ID == Builtin::BIwcscmp || ID == Builtin::BIwcsncmp ||
-                ID == Builtin::BI__builtin_wcscmp ||
-                ID == Builtin::BI__builtin_wcsncmp;
   assert(A.getFieldDesc()->isPrimitiveArray());
   assert(B.getFieldDesc()->isPrimitiveArray());
 
@@ -253,21 +248,6 @@ static bool interp__builtin_strcmp(InterpState &S, CodePtr 
OpPC,
         !CheckRange(S, OpPC, PB, AK_Read)) {
       return false;
     }
-
-    if (IsWide)
-      INT_TYPE_SWITCH(
-          *S.getContext().classify(S.getASTContext().getWCharType()), {
-            T A = PA.deref<T>();
-            T B = PB.deref<T>();
-            if (A < B) {
-              pushInteger(S, -1, Call->getType());
-              return true;
-            } else if (A > B) {
-              pushInteger(S, 1, Call->getType());
-              return true;
-            }
-          });
-
     uint8_t CA = PA.deref<uint8_t>();
     uint8_t CB = PB.deref<uint8_t>();
 
@@ -2140,10 +2120,6 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, 
const Function *F,
   case Builtin::BIstrcmp:
   case Builtin::BI__builtin_strncmp:
   case Builtin::BIstrncmp:
-  case Builtin::BI__builtin_wcsncmp:
-  case Builtin::BIwcsncmp:
-  case Builtin::BI__builtin_wcscmp:
-  case Builtin::BIwcscmp:
     if (!interp__builtin_strcmp(S, OpPC, Frame, F, Call))
       return false;
     break;

diff  --git a/clang/test/AST/ByteCode/builtin-functions.cpp 
b/clang/test/AST/ByteCode/builtin-functions.cpp
index 8408286314bb8..828822375e95e 100644
--- a/clang/test/AST/ByteCode/builtin-functions.cpp
+++ b/clang/test/AST/ByteCode/builtin-functions.cpp
@@ -28,8 +28,6 @@ extern "C" {
   extern char *strchr(const char *s, int c);
   extern wchar_t *wmemchr(const wchar_t *s, wchar_t c, size_t n);
   extern wchar_t *wcschr(const wchar_t *s, wchar_t c);
-  extern int wcscmp(const wchar_t *s1, const wchar_t *s2);
-  extern int wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n);
 }
 
 namespace strcmp {
@@ -74,50 +72,6 @@ namespace strcmp {
   static_assert(__builtin_strncmp("abab\0banana", "abab\0canada", 100) == 0);
 }
 
-namespace WcsCmp {
-  constexpr wchar_t kFoobar[6] = {L'f',L'o',L'o',L'b',L'a',L'r'};
-  constexpr wchar_t kFoobazfoobar[12] = 
{L'f',L'o',L'o',L'b',L'a',L'z',L'f',L'o',L'o',L'b',L'a',L'r'};
-
-  static_assert(__builtin_wcscmp(L"abab", L"abab") == 0);
-  static_assert(__builtin_wcscmp(L"abab", L"abba") == -1);
-  static_assert(__builtin_wcscmp(L"abab", L"abaa") == 1);
-  static_assert(__builtin_wcscmp(L"ababa", L"abab") == 1);
-  static_assert(__builtin_wcscmp(L"abab", L"ababa") == -1);
-  static_assert(__builtin_wcscmp(L"abab\0banana", L"abab") == 0);
-  static_assert(__builtin_wcscmp(L"abab", L"abab\0banana") == 0);
-  static_assert(__builtin_wcscmp(L"abab\0banana", L"abab\0canada") == 0);
-#if __WCHAR_WIDTH__ == 32
-  static_assert(__builtin_wcscmp(L"a\x83838383", L"a") == (wchar_t)-1U >> 31);
-#endif
-  static_assert(__builtin_wcscmp(0, L"abab") == 0); // both-error {{not an 
integral constant}} \
-                                                    // both-note 
{{dereferenced null}}
-  static_assert(__builtin_wcscmp(L"abab", 0) == 0); // both-error {{not an 
integral constant}} \
-                                                    // both-note 
{{dereferenced null}}
-
-  static_assert(__builtin_wcscmp(kFoobar, kFoobazfoobar) == -1);
-  static_assert(__builtin_wcscmp(kFoobar, kFoobazfoobar + 6) == 0); // 
both-error {{not an integral constant}} \
-                                                                    // 
both-note {{dereferenced one-past-the-end}}
-
-  static_assert(__builtin_wcsncmp(L"abaa", L"abba", 5) == -1);
-  static_assert(__builtin_wcsncmp(L"abaa", L"abba", 4) == -1);
-  static_assert(__builtin_wcsncmp(L"abaa", L"abba", 3) == -1);
-  static_assert(__builtin_wcsncmp(L"abaa", L"abba", 2) == 0);
-  static_assert(__builtin_wcsncmp(L"abaa", L"abba", 1) == 0);
-  static_assert(__builtin_wcsncmp(L"abaa", L"abba", 0) == 0);
-  static_assert(__builtin_wcsncmp(0, 0, 0) == 0);
-  static_assert(__builtin_wcsncmp(L"abab\0banana", L"abab\0canada", 100) == 0);
-#if __WCHAR_WIDTH__ == 32
-  static_assert(__builtin_wcsncmp(L"a\x83838383", L"aa", 2) ==
-                (wchar_t)-1U >> 31);
-#endif
-
-  static_assert(__builtin_wcsncmp(kFoobar, kFoobazfoobar, 6) == -1);
-  static_assert(__builtin_wcsncmp(kFoobar, kFoobazfoobar, 7) == -1);
-  static_assert(__builtin_wcsncmp(kFoobar, kFoobazfoobar + 6, 6) == 0);
-  static_assert(__builtin_wcsncmp(kFoobar, kFoobazfoobar + 6, 7) == 0); // 
both-error {{not an integral constant}} \
-                                                                        // 
both-note {{dereferenced one-past-the-end}}
-}
-
 /// Copied from constant-expression-cxx11.cpp
 namespace strlen {
 constexpr const char *a = "foo\0quux";


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

Reply via email to