From 321333e51ef8411c00d3df83d95a875c1fc75874 Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Tue, 13 Oct 2009 07:57:33 +0000 Subject: [PATCH] Force memory use markers to have a ConstantInt for the size argument. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83960 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/LangRef.html | 20 ++++++++++++-------- lib/VMCore/Verifier.cpp | 11 +++++++++++ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/docs/LangRef.html b/docs/LangRef.html index 7adb89621f4..c5905791815 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -7018,8 +7018,9 @@ LLVM.

object's lifetime.

Arguments:
-

The first argument is a the size of the object, or -1 if it is variable - sized. The second argument is a pointer to the object.

+

The first argument is a constant integer representing the size of the + object, or -1 if it is variable sized. The second argument is a pointer to + the object.

Semantics:

This intrinsic indicates that before this point in the code, the value of the @@ -7047,8 +7048,9 @@ LLVM.

object's lifetime.

Arguments:
-

The first argument is a the size of the object, or -1 if it is variable - sized. The second argument is a pointer to the object.

+

The first argument is a constant integer representing the size of the + object, or -1 if it is variable sized. The second argument is a pointer to + the object.

Semantics:

This intrinsic indicates that after this point in the code, the value of the @@ -7075,8 +7077,9 @@ LLVM.

a memory object will not change.

Arguments:
-

The first argument is a the size of the object, or -1 if it is variable - sized. The second argument is a pointer to the object.

+

The first argument is a constant integer representing the size of the + object, or -1 if it is variable sized. The second argument is a pointer to + the object.

Semantics:

This intrinsic indicates that until an llvm.invariant.end that uses @@ -7103,8 +7106,9 @@ LLVM.

Arguments:

The first argument is the matching llvm.invariant.start intrinsic. - The second argument is a the size of the object, or -1 if it is variable - sized and the third argument is a pointer to the object.

+ The second argument is a constant integer representing the size of the + object, or -1 if it is variable sized and the third argument is a pointer + to the object.

Semantics:

This intrinsic indicates that the memory is mutable again.

diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index 257b2495a8a..75ea4c3e2f2 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -1578,6 +1578,17 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) { "llvm.stackprotector parameter #2 must resolve to an alloca.", &CI); break; + case Intrinsic::lifetime_start: + case Intrinsic::lifetime_end: + case Intrinsic::invariant_start: + Assert1(isa(CI.getOperand(1)), + "size argument of memory use markers must be a constant integer", + &CI); + break; + case Intrinsic::invariant_end: + Assert1(isa(CI.getOperand(2)), + "llvm.invariant.end parameter #2 must be a constant integer", &CI); + break; } }