Author: dim
Date: Wed Mar  5 22:43:30 2014
New Revision: 262809
URL: http://svnweb.freebsd.org/changeset/base/262809

Log:
  Pull in r203007 from upstream clang trunk:
  
    Don't produce an alias between destructors with different calling 
conventions.
  
    Fixes pr19007.
  
  (Please note that is an LLVM PR identifier, not a FreeBSD one.)
  
  This should fix Firefox and/or libxul crashes (due to problems with
  regparm/stdcall calling conventions) on i386.
  
  Reported by:  multiple users on freebsd-current
  PR:           bin/187103
  MFC after:    1 week

Modified:
  head/contrib/llvm/tools/clang/lib/CodeGen/CGCXX.cpp

Modified: head/contrib/llvm/tools/clang/lib/CodeGen/CGCXX.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/CodeGen/CGCXX.cpp Wed Mar  5 22:04:30 
2014        (r262808)
+++ head/contrib/llvm/tools/clang/lib/CodeGen/CGCXX.cpp Wed Mar  5 22:43:30 
2014        (r262809)
@@ -92,7 +92,13 @@ bool CodeGenModule::TryEmitBaseDestructo
   if (!ClassLayout.getBaseClassOffset(UniqueBase).isZero())
     return true;
 
+  // Give up if the calling conventions don't match. We could update the call,
+  // but it is probably not worth it.
   const CXXDestructorDecl *BaseD = UniqueBase->getDestructor();
+  if (BaseD->getType()->getAs<FunctionType>()->getCallConv() !=
+      D->getType()->getAs<FunctionType>()->getCallConv())
+    return true;
+
   return TryEmitDefinitionAsAlias(GlobalDecl(D, Dtor_Base),
                                   GlobalDecl(BaseD, Dtor_Base),
                                   false);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to