IR: SrcTy == DstTy doesn't imply that a cast is valid
authorDavid Majnemer <david.majnemer@gmail.com>
Mon, 16 Feb 2015 09:37:35 +0000 (09:37 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Mon, 16 Feb 2015 09:37:35 +0000 (09:37 +0000)
Cast validity depends on the cast's kind, not just its types.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229366 91177308-0d34-0410-b5e6-96231b3b80d8

lib/IR/Instructions.cpp
test/Assembler/invalid_cast4.ll [new file with mode: 0644]

index 8c4eeafdf84dc77334045488ab201170e62d0e0c..7136923ecb45d384c2c41be94b355c309d73fd2f 100644 (file)
@@ -2864,10 +2864,6 @@ CastInst::castIsValid(Instruction::CastOps op, Value *S, Type *DstTy) {
   // Check for type sanity on the arguments
   Type *SrcTy = S->getType();
 
-  // If this is a cast to the same type then it's trivially true.
-  if (SrcTy == DstTy)
-    return true;
-
   if (!SrcTy->isFirstClassType() || !DstTy->isFirstClassType() ||
       SrcTy->isAggregateType() || DstTy->isAggregateType())
     return false;
diff --git a/test/Assembler/invalid_cast4.ll b/test/Assembler/invalid_cast4.ll
new file mode 100644 (file)
index 0000000..7056f84
--- /dev/null
@@ -0,0 +1,4 @@
+; RUN: not llvm-as < %s 2>&1 | FileCheck %s
+
+; CHECK: invalid cast opcode for cast from 'i64' to 'i64'
+global i64* inttoptr (i64 0 to i64)