Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Mar 2016 21:23:19 +0000 (UTC)
From:      Brooks Davis <brooks@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r412196 - in head/devel/llvm37: . files
Message-ID:  <201603302123.u2ULNJa3006753@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: brooks
Date: Wed Mar 30 21:23:19 2016
New Revision: 412196
URL: https://svnweb.freebsd.org/changeset/ports/412196

Log:
  Apply upstream llvm r243590
  
  Koop Mast reported that on FreeBSD 10.1-R i386, devel/libclc gets a build
  error, when its 'prepare-builtins' segfaults.  It turns out this is due to
  a stack overflow, when recursively sorting an internal list.  Upstream,
  this was changed to an iterative operation, to prevent stack overflow in
  some cases, here:
  
  http://reviews.llvm.org/rL243590
  ------------------------------------------------------------------------
  r243590 | matze | 2015-07-30 01:22:48 +0200 (Thu, 30 Jul 2015) | 9 lines
  
  IR: Implement Value::mergeUseLists() iteratively
  
  This avoids stack overflows when the the compiler does not perform tail
  call
  elimination. Apparently this happens for MSVC with the /Ob2 switch which
  may be used by external code including this header.
  
  Reported by and based on a patch from Jean-Francois Riendeau.
  
  Related to rdar://21900756
  ------------------------------------------------------------------------
  
  I have verified this allows devel/libclc to build successfully on 10.1-R.
  
  PR:		208403
  Submitted by:	dim

Added:
  head/devel/llvm37/files/patch-llvm-svn-243590   (contents, props changed)
Modified:
  head/devel/llvm37/Makefile

Modified: head/devel/llvm37/Makefile
==============================================================================
--- head/devel/llvm37/Makefile	Wed Mar 30 20:54:33 2016	(r412195)
+++ head/devel/llvm37/Makefile	Wed Mar 30 21:23:19 2016	(r412196)
@@ -2,6 +2,7 @@
 
 PORTNAME=	llvm
 DISTVERSION=	3.7.1
+PORTREVISION=	1
 CATEGORIES=	devel lang
 MASTER_SITES=	http://llvm.org/${PRE_}releases/${LLVM_RELEASE}/${RCDIR}
 DISTNAME=	${PORTNAME}-${DISTVERSION}.src
@@ -426,5 +427,16 @@ svn-patch-lldb:
 	svn diff -c ${PATCH_REV} ${_LLVM_BASE} | \
 	    sed -E -e 's;^(---|\+\+\+) ;\1 tools/lldb/;' >> ${_PATCH_FILE}
 .endif
+.if make(svn-patch-llvm)
+.if !defined(PATCH_REV)
+.error svn-patch-llvm requires that PATCH_REV be set
+.endif
+_PATCH_FILE=${FILESDIR}/patch-llvm-svn-${PATCH_REV}
+_LLVM_BASE=http://llvm.org/svn/llvm-project/llvm/trunk
+svn-patch-llvm:
+	svn log -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE}
+	svn diff -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE}
+.endif
+
 
 .include <bsd.port.post.mk>

Added: head/devel/llvm37/files/patch-llvm-svn-243590
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/llvm37/files/patch-llvm-svn-243590	Wed Mar 30 21:23:19 2016	(r412196)
@@ -0,0 +1,73 @@
+------------------------------------------------------------------------
+r243590 | matze | 2015-07-29 23:22:48 +0000 (Wed, 29 Jul 2015) | 9 lines
+
+IR: Implement Value::mergeUseLists() iteratively
+
+This avoids stack overflows when the the compiler does not perform tail call
+elimination. Apparently this happens for MSVC with the /Ob2 switch which
+may be used by external code including this header.
+
+Reported by and based on a patch from Jean-Francois Riendeau.
+
+Related to rdar://21900756
+------------------------------------------------------------------------
+Index: include/llvm/IR/Value.h
+===================================================================
+--- include/llvm/IR/Value.h	(revision 243589)
++++ include/llvm/IR/Value.h	(revision 243590)
+@@ -493,7 +493,28 @@
+   template <class Compare>
+   static Use *mergeUseLists(Use *L, Use *R, Compare Cmp) {
+     Use *Merged;
+-    mergeUseListsImpl(L, R, &Merged, Cmp);
++    Use **Next = &Merged;
++
++    for (;;) {
++      if (!L) {
++        *Next = R;
++        break;
++      }
++      if (!R) {
++        *Next = L;
++        break;
++      }
++      if (Cmp(*R, *L)) {
++        *Next = R;
++        Next = &R->Next;
++        R = R->Next;
++      } else {
++        *Next = L;
++        Next = &L->Next;
++        L = L->Next;
++      }
++    }
++
+     return Merged;
+   }
+ 
+@@ -586,25 +607,6 @@
+   }
+ }
+ 
+-template <class Compare>
+-void Value::mergeUseListsImpl(Use *L, Use *R, Use **Next, Compare Cmp) {
+-  if (!L) {
+-    *Next = R;
+-    return;
+-  }
+-  if (!R) {
+-    *Next = L;
+-    return;
+-  }
+-  if (Cmp(*R, *L)) {
+-    *Next = R;
+-    mergeUseListsImpl(L, R->Next, &R->Next, Cmp);
+-    return;
+-  }
+-  *Next = L;
+-  mergeUseListsImpl(L->Next, R, &L->Next, Cmp);
+-}
+-
+ // isa - Provide some specializations of isa so that we don't have to include
+ // the subtype header files to test to see if the value is a subclass...
+ //



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201603302123.u2ULNJa3006753>