Force memory use markers to have a ConstantInt for the size argument.
authorNick Lewycky <nicholas@mxc.ca>
Tue, 13 Oct 2009 07:57:33 +0000 (07:57 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Tue, 13 Oct 2009 07:57:33 +0000 (07:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83960 91177308-0d34-0410-b5e6-96231b3b80d8

docs/LangRef.html
lib/VMCore/Verifier.cpp

index 7adb89621f4134c47371103a923c5fc8e41fc26a..c59057918156dd5dd6e1e8fe5613d58c64475d24 100644 (file)
@@ -7018,8 +7018,9 @@ LLVM</a>.</p>
    object's lifetime.</p>
 
 <h5>Arguments:</h5>
-<p>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.</p>
+<p>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.</p>
 
 <h5>Semantics:</h5>
 <p>This intrinsic indicates that before this point in the code, the value of the
@@ -7047,8 +7048,9 @@ LLVM</a>.</p>
    object's lifetime.</p>
 
 <h5>Arguments:</h5>
-<p>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.</p>
+<p>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.</p>
 
 <h5>Semantics:</h5>
 <p>This intrinsic indicates that after this point in the code, the value of the
@@ -7075,8 +7077,9 @@ LLVM</a>.</p>
    a memory object will not change.</p>
 
 <h5>Arguments:</h5>
-<p>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.</p>
+<p>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.</p>
 
 <h5>Semantics:</h5>
 <p>This intrinsic indicates that until an <tt>llvm.invariant.end</tt> that uses
@@ -7103,8 +7106,9 @@ LLVM</a>.</p>
 
 <h5>Arguments:</h5>
 <p>The first argument is the matching <tt>llvm.invariant.start</tt> 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.</p>
+   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.</p>
 
 <h5>Semantics:</h5>
 <p>This intrinsic indicates that the memory is mutable again.</p>
index 257b2495a8ac4142cdb947c813f53096c646a0b7..75ea4c3e2f28f4fa97af37c5de175626d3c63633 100644 (file)
@@ -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<ConstantInt>(CI.getOperand(1)),
+            "size argument of memory use markers must be a constant integer",
+            &CI);
+    break;
+  case Intrinsic::invariant_end:
+    Assert1(isa<ConstantInt>(CI.getOperand(2)),
+            "llvm.invariant.end parameter #2 must be a constant integer", &CI);
+    break;
   }
 }