[polly] r265834 - [FIX] Do not crash on opaque (unsized) types.

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 8 12:20:04 PDT 2016


Author: jdoerfert
Date: Fri Apr  8 14:20:03 2016
New Revision: 265834

URL: http://llvm.org/viewvc/llvm-project?rev=265834&view=rev
Log:
[FIX] Do not crash on opaque (unsized) types.

Added:
    polly/trunk/test/ScopInfo/opaque-struct.ll
Modified:
    polly/trunk/lib/Analysis/ScopInfo.cpp

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=265834&r1=265833&r2=265834&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Fri Apr  8 14:20:03 2016
@@ -3992,6 +3992,11 @@ bool ScopInfo::buildAccessMultiDimFixed(
     auto *Src = BitCast->getOperand(0);
     auto *SrcTy = Src->getType();
     auto *DstTy = BitCast->getType();
+    // Do not try to delinearize non-sized (opaque) pointers.
+    if ((SrcTy->isPointerTy() && !SrcTy->getPointerElementType()->isSized()) ||
+        (DstTy->isPointerTy() && !DstTy->getPointerElementType()->isSized())) {
+      return false;
+    }
     if (SrcTy->isPointerTy() && DstTy->isPointerTy() &&
         DL->getTypeAllocSize(SrcTy->getPointerElementType()) ==
             DL->getTypeAllocSize(DstTy->getPointerElementType()))

Added: polly/trunk/test/ScopInfo/opaque-struct.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/opaque-struct.ll?rev=265834&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/opaque-struct.ll (added)
+++ polly/trunk/test/ScopInfo/opaque-struct.ll Fri Apr  8 14:20:03 2016
@@ -0,0 +1,25 @@
+; RUN: opt %loadPolly -polly-scops -disable-output < %s 
+;
+; Check that we do not crash with unsized (opaque) types.
+;
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+%struct.s3 = type opaque
+%struct.stmt = type opaque
+
+; Function Attrs: nounwind uwtable
+define void @columnMem(%struct.stmt* %pStmt) #0 {
+entry:
+  br label %if.else
+
+if.else:                                          ; preds = %entry
+  %db = bitcast %struct.stmt* %pStmt to %struct.s3**
+  %0 = load %struct.s3*, %struct.s3** %db, align 8
+  br i1 false, label %if.end9, label %if.then7
+
+if.then7:                                         ; preds = %if.else
+  br label %if.end9
+
+if.end9:                                          ; preds = %if.then7, %if.else
+  ret void
+}




More information about the llvm-commits mailing list