[llvm] f4960da - Revert "[Verifier] Reject va_start in non-variadic function (#88809)"

Jon Chesterfield via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 16 03:25:14 PDT 2024


Author: Jon Chesterfield
Date: 2024-04-16T11:24:45+01:00
New Revision: f4960da6023b8034ae68925c3223d51624621b37

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

LOG: Revert "[Verifier] Reject va_start in non-variadic function (#88809)"

This reverts commit 61717c1aa1f08eb57839a21fb2d9004739022e0d. Failed a MLIR test

Added: 
    

Modified: 
    llvm/lib/Analysis/Lint.cpp
    llvm/lib/IR/Verifier.cpp
    llvm/test/CodeGen/AArch64/GlobalISel/vastart.ll
    llvm/test/Other/lint.ll

Removed: 
    llvm/test/Verifier/variadic.ll


################################################################################
diff  --git a/llvm/lib/Analysis/Lint.cpp b/llvm/lib/Analysis/Lint.cpp
index 1ab856ac8830a9..0694c2995dfcce 100644
--- a/llvm/lib/Analysis/Lint.cpp
+++ b/llvm/lib/Analysis/Lint.cpp
@@ -350,7 +350,10 @@ void Lint::visitCallBase(CallBase &I) {
     }
 
     case Intrinsic::vastart:
-      // vastart in non-varargs function is rejected by the verifier
+      Check(I.getParent()->getParent()->isVarArg(),
+            "Undefined behavior: va_start called in a non-varargs function",
+            &I);
+
       visitMemoryReference(I, MemoryLocation::getForArgument(&I, 0, TLI),
                            std::nullopt, nullptr, MemRef::Read | MemRef::Write);
       break;

diff  --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index 4cd61e6e531bff..516d4a0515569b 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -5798,11 +5798,6 @@ void Verifier::visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call) {
 
     break;
   }
-  case Intrinsic::vastart: {
-    Check(Call.getFunction()->isVarArg(),
-          "va_start called in a non-varargs function");
-    break;
-  }
   case Intrinsic::vector_reduce_and:
   case Intrinsic::vector_reduce_or:
   case Intrinsic::vector_reduce_xor:

diff  --git a/llvm/test/CodeGen/AArch64/GlobalISel/vastart.ll b/llvm/test/CodeGen/AArch64/GlobalISel/vastart.ll
index 8c6e01d934c2d8..bd576d0f70e9c1 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/vastart.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/vastart.ll
@@ -3,7 +3,7 @@
 
 
 declare void @llvm.va_start(ptr)
-define void @test_va_start(ptr %list, ...) {
+define void @test_va_start(ptr %list) {
 ; CHECK-LABEL: name: test_va_start
 ; CHECK: [[LIST:%[0-9]+]]:_(p0) = COPY $x0
 ; CHECK-IOS: G_VASTART [[LIST]](p0) :: (store (s64) into %ir.list, align 1)

diff  --git a/llvm/test/Other/lint.ll b/llvm/test/Other/lint.ll
index 6fd2d40cd2f298..6b31b31a78c98a 100644
--- a/llvm/test/Other/lint.ll
+++ b/llvm/test/Other/lint.ll
@@ -124,6 +124,13 @@ define void @0() nounwind {
   ret void
 }
 
+; CHECK: va_start called in a non-varargs function
+declare void @llvm.va_start(ptr)
+define void @not_vararg(ptr %p) nounwind {
+  call void @llvm.va_start(ptr %p)
+  ret void
+}
+
 ; CHECK: Undefined behavior: Branch to non-blockaddress
 define void @use_indbr() {
   indirectbr ptr @foo, [label %block]

diff  --git a/llvm/test/Verifier/variadic.ll b/llvm/test/Verifier/variadic.ll
deleted file mode 100644
index 55e4a4da0a9203..00000000000000
--- a/llvm/test/Verifier/variadic.ll
+++ /dev/null
@@ -1,8 +0,0 @@
-; RUN: not opt -S -passes=verify 2>&1 < %s | FileCheck %s
-
-; CHECK: va_start called in a non-varargs function
-declare void @llvm.va_start(ptr)
-define void @not_vararg(ptr %p) nounwind {
-  call void @llvm.va_start(ptr %p)
-  ret void
-}


        


More information about the llvm-commits mailing list