From owner-freebsd-gecko@FreeBSD.ORG Sun Jun 22 04:24:47 2014 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id CFA5ED29 for ; Sun, 22 Jun 2014 04:24:47 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian.chruetertee.ch [217.150.244.247]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5578A225F for ; Sun, 22 Jun 2014 04:24:46 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian [217.150.244.247]) by trillian.chruetertee.ch (8.14.4/8.14.3) with ESMTP id s5M4OcQo036663 for ; Sun, 22 Jun 2014 04:24:38 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: (from www@localhost) by trillian.chruetertee.ch (8.14.4/8.14.3/Submit) id s5M4OXBf034542 for freebsd-gecko@freebsd.org; Sun, 22 Jun 2014 04:24:33 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Date: Sun, 22 Jun 2014 04:24:33 GMT Message-Id: <201406220424.s5M4OXBf034542@trillian.chruetertee.ch> X-Authentication-Warning: trillian.chruetertee.ch: www set sender to svn-freebsd-gecko@chruetertee.ch using -f From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1609 - in trunk: mail/thunderbird/files www/firefox-esr/files www/firefox-nightly/files www/firefox/files www/libxul/files www/seamonkey/files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reply-To: freebsd-gecko@freebsd.org X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 22 Jun 2014 04:24:48 -0000 Author: jbeich Date: Sun Jun 22 04:24:32 2014 New Revision: 1609 Log: fix generated code to contain explicit alignment Added: trunk/mail/thunderbird/files/patch-bug1026499 trunk/mail/thunderbird/files/patch-bug779713 trunk/www/firefox-esr/files/patch-bug1026499 trunk/www/firefox-esr/files/patch-bug779713 trunk/www/firefox-nightly/files/patch-bug1026499 trunk/www/firefox-nightly/files/patch-bug779713 trunk/www/firefox/files/patch-bug1026499 trunk/www/firefox/files/patch-bug779713 trunk/www/libxul/files/patch-bug1026499 trunk/www/libxul/files/patch-bug779713 trunk/www/seamonkey/files/patch-bug1026499 trunk/www/seamonkey/files/patch-bug779713 Added: trunk/mail/thunderbird/files/patch-bug1026499 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/mail/thunderbird/files/patch-bug1026499 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,68 @@ +commit 8d0efe4 +Author: Martin Husemann +Date: Wed Jun 18 18:12:22 2014 +0200 + + Bug 1026499 - Use MOZ_ALIGNED_DECL to declare union members in ipdl value declarations. r=bsmedberg +--- + ipc/ipdl/ipdl/cxx/ast.py | 7 ++++--- + ipc/ipdl/ipdl/cxx/cgen.py | 5 ++++- + ipc/ipdl/ipdl/lower.py | 2 +- + 4 files changed, 10 insertions(+), 5 deletions(-) + +diff --git ipc/ipdl/ipdl/cxx/ast.py ipc/ipdl/ipdl/cxx/ast.py +index 3180a65..c2d945b 100644 +--- mozilla/ipc/ipdl/ipdl/cxx/ast.py ++++ mozilla/ipc/ipdl/ipdl/cxx/ast.py +@@ -336,12 +336,13 @@ Type.VOID = Type('void') + Type.VOIDPTR = Type('void', ptr=1) + + class TypeArray(Node): +- def __init__(self, basetype, nmemb): +- '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr''' ++ def __init__(self, basetype, nmemb, alignType): ++ '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr, |alignType| is a type''' + self.basetype = basetype + self.nmemb = nmemb ++ self.alignType = alignType + def __deepcopy__(self, memo): +- return TypeArray(deepcopy(self.basetype, memo), nmemb) ++ return TypeArray(deepcopy(self.basetype, memo), nmemb, alignType) + + class TypeEnum(Node): + def __init__(self, name=None): +diff --git ipc/ipdl/ipdl/cxx/cgen.py ipc/ipdl/ipdl/cxx/cgen.py +index 48b0988..bc914cf 100644 +--- mozilla/ipc/ipdl/ipdl/cxx/cgen.py ++++ mozilla/ipc/ipdl/ipdl/cxx/cgen.py +@@ -101,6 +101,7 @@ class CxxCodeGen(CodePrinter, Visitor): + def visitDecl(self, d): + # C-syntax arrays make code generation much more annoying + if isinstance(d.type, TypeArray): ++ self.write('MOZ_ALIGNED_DECL(') + d.type.basetype.accept(self) + else: + d.type.accept(self) +@@ -111,7 +112,9 @@ class CxxCodeGen(CodePrinter, Visitor): + if isinstance(d.type, TypeArray): + self.write('[') + d.type.nmemb.accept(self) +- self.write(']') ++ self.write('], MOZ_ALIGNOF(') ++ d.type.alignType.accept(self) ++ self.write('))') + + def visitParam(self, p): + self.visitDecl(p) +diff --git ipc/ipdl/ipdl/lower.py ipc/ipdl/ipdl/lower.py +index e97a34c..9360f3c 100644 +--- mozilla/ipc/ipdl/ipdl/lower.py ++++ mozilla/ipc/ipdl/ipdl/lower.py +@@ -768,7 +768,7 @@ IPDL union type.""" + if self.recursive: + return self.ptrToType() + else: +- return TypeArray(Type('char'), ExprSizeof(self.internalType())) ++ return TypeArray(Type('char'), ExprSizeof(self.internalType()), self.internalType()) + + def unionValue(self): + # NB: knows that Union's storage C union is named |mValue| Added: trunk/mail/thunderbird/files/patch-bug779713 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/mail/thunderbird/files/patch-bug779713 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,72 @@ +diff --git mfbt/Util.h mfbt/Util.h +index e0843ca..353ec36 100644 +--- mozilla/mfbt/Util.h ++++ mozilla/mfbt/Util.h +@@ -19,6 +19,13 @@ + + namespace mozilla { + ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++#define MOZ_ALIGNOF(T) alignof(T) ++#elif defined(__GNUC__) ++#define MOZ_ALIGNOF(T) __alignof__(T) ++#elif defined(_MSC_VER) ++#define MOZ_ALIGNOF(T) __alignof(T) ++#else + /* + * This class, and the corresponding macro MOZ_ALIGNOF, figure out how many + * bytes of alignment a given type needs. +@@ -37,6 +44,7 @@ class AlignmentFinder + }; + + #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment ++#endif + + /* + * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. +@@ -48,7 +56,10 @@ class AlignmentFinder + * will declare a two-character array |arr| aligned to 8 bytes. + */ + +-#if defined(__GNUC__) ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++# define MOZ_ALIGNED_DECL(_type, _align) \ ++ alignas(_align) _type ++#elif defined(__GNUC__) + # define MOZ_ALIGNED_DECL(_type, _align) \ + _type __attribute__((aligned(_align))) + #elif defined(_MSC_VER) +diff --git mfbt/Attributes.h mfbt/Attributes.h +index d317766..ddb13da 100644 +--- mozilla/mfbt/Attributes.h ++++ mozilla/mfbt/Attributes.h +@@ -67,6 +67,9 @@ + # ifndef __has_extension + # define __has_extension __has_feature /* compatibility, for older versions of clang */ + # endif ++# if __has_extension(cxx_alignas) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if __has_extension(cxx_constexpr) + # define MOZ_HAVE_CXX11_CONSTEXPR + # endif +@@ -85,6 +88,9 @@ + # endif + #elif defined(__GNUC__) + # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L ++# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) + # define MOZ_HAVE_CXX11_OVERRIDE + # define MOZ_HAVE_CXX11_FINAL final +@@ -102,6 +108,9 @@ + # define MOZ_HAVE_NEVER_INLINE __attribute__((noinline)) + # define MOZ_HAVE_NORETURN __attribute__((noreturn)) + #elif defined(_MSC_VER) ++# if _MSC_VER >= 1800 ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if _MSC_VER >= 1700 + # define MOZ_HAVE_CXX11_FINAL final + # else Added: trunk/www/firefox-esr/files/patch-bug1026499 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox-esr/files/patch-bug1026499 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,68 @@ +commit 8d0efe4 +Author: Martin Husemann +Date: Wed Jun 18 18:12:22 2014 +0200 + + Bug 1026499 - Use MOZ_ALIGNED_DECL to declare union members in ipdl value declarations. r=bsmedberg +--- + ipc/ipdl/ipdl/cxx/ast.py | 7 ++++--- + ipc/ipdl/ipdl/cxx/cgen.py | 5 ++++- + ipc/ipdl/ipdl/lower.py | 2 +- + 4 files changed, 10 insertions(+), 5 deletions(-) + +diff --git ipc/ipdl/ipdl/cxx/ast.py ipc/ipdl/ipdl/cxx/ast.py +index 3180a65..c2d945b 100644 +--- ipc/ipdl/ipdl/cxx/ast.py ++++ ipc/ipdl/ipdl/cxx/ast.py +@@ -336,12 +336,13 @@ Type.VOID = Type('void') + Type.VOIDPTR = Type('void', ptr=1) + + class TypeArray(Node): +- def __init__(self, basetype, nmemb): +- '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr''' ++ def __init__(self, basetype, nmemb, alignType): ++ '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr, |alignType| is a type''' + self.basetype = basetype + self.nmemb = nmemb ++ self.alignType = alignType + def __deepcopy__(self, memo): +- return TypeArray(deepcopy(self.basetype, memo), nmemb) ++ return TypeArray(deepcopy(self.basetype, memo), nmemb, alignType) + + class TypeEnum(Node): + def __init__(self, name=None): +diff --git ipc/ipdl/ipdl/cxx/cgen.py ipc/ipdl/ipdl/cxx/cgen.py +index 48b0988..bc914cf 100644 +--- ipc/ipdl/ipdl/cxx/cgen.py ++++ ipc/ipdl/ipdl/cxx/cgen.py +@@ -101,6 +101,7 @@ class CxxCodeGen(CodePrinter, Visitor): + def visitDecl(self, d): + # C-syntax arrays make code generation much more annoying + if isinstance(d.type, TypeArray): ++ self.write('MOZ_ALIGNED_DECL(') + d.type.basetype.accept(self) + else: + d.type.accept(self) +@@ -111,7 +112,9 @@ class CxxCodeGen(CodePrinter, Visitor): + if isinstance(d.type, TypeArray): + self.write('[') + d.type.nmemb.accept(self) +- self.write(']') ++ self.write('], MOZ_ALIGNOF(') ++ d.type.alignType.accept(self) ++ self.write('))') + + def visitParam(self, p): + self.visitDecl(p) +diff --git ipc/ipdl/ipdl/lower.py ipc/ipdl/ipdl/lower.py +index e97a34c..9360f3c 100644 +--- ipc/ipdl/ipdl/lower.py ++++ ipc/ipdl/ipdl/lower.py +@@ -768,7 +768,7 @@ IPDL union type.""" + if self.recursive: + return self.ptrToType() + else: +- return TypeArray(Type('char'), ExprSizeof(self.internalType())) ++ return TypeArray(Type('char'), ExprSizeof(self.internalType()), self.internalType()) + + def unionValue(self): + # NB: knows that Union's storage C union is named |mValue| Added: trunk/www/firefox-esr/files/patch-bug779713 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox-esr/files/patch-bug779713 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,72 @@ +diff --git mfbt/Util.h mfbt/Util.h +index e0843ca..353ec36 100644 +--- mfbt/Util.h ++++ mfbt/Util.h +@@ -19,6 +19,13 @@ + + namespace mozilla { + ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++#define MOZ_ALIGNOF(T) alignof(T) ++#elif defined(__GNUC__) ++#define MOZ_ALIGNOF(T) __alignof__(T) ++#elif defined(_MSC_VER) ++#define MOZ_ALIGNOF(T) __alignof(T) ++#else + /* + * This class, and the corresponding macro MOZ_ALIGNOF, figure out how many + * bytes of alignment a given type needs. +@@ -37,6 +44,7 @@ class AlignmentFinder + }; + + #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment ++#endif + + /* + * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. +@@ -48,7 +56,10 @@ class AlignmentFinder + * will declare a two-character array |arr| aligned to 8 bytes. + */ + +-#if defined(__GNUC__) ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++# define MOZ_ALIGNED_DECL(_type, _align) \ ++ alignas(_align) _type ++#elif defined(__GNUC__) + # define MOZ_ALIGNED_DECL(_type, _align) \ + _type __attribute__((aligned(_align))) + #elif defined(_MSC_VER) +diff --git mfbt/Attributes.h mfbt/Attributes.h +index d317766..ddb13da 100644 +--- mfbt/Attributes.h ++++ mfbt/Attributes.h +@@ -67,6 +67,9 @@ + # ifndef __has_extension + # define __has_extension __has_feature /* compatibility, for older versions of clang */ + # endif ++# if __has_extension(cxx_alignas) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if __has_extension(cxx_constexpr) + # define MOZ_HAVE_CXX11_CONSTEXPR + # endif +@@ -85,6 +88,9 @@ + # endif + #elif defined(__GNUC__) + # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L ++# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) + # define MOZ_HAVE_CXX11_OVERRIDE + # define MOZ_HAVE_CXX11_FINAL final +@@ -102,6 +108,9 @@ + # define MOZ_HAVE_NEVER_INLINE __attribute__((noinline)) + # define MOZ_HAVE_NORETURN __attribute__((noreturn)) + #elif defined(_MSC_VER) ++# if _MSC_VER >= 1800 ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if _MSC_VER >= 1700 + # define MOZ_HAVE_CXX11_FINAL final + # else Added: trunk/www/firefox-nightly/files/patch-bug1026499 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox-nightly/files/patch-bug1026499 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,68 @@ +commit 8d0efe4 +Author: Martin Husemann +Date: Wed Jun 18 18:12:22 2014 +0200 + + Bug 1026499 - Use MOZ_ALIGNED_DECL to declare union members in ipdl value declarations. r=bsmedberg +--- + ipc/ipdl/ipdl/cxx/ast.py | 7 ++++--- + ipc/ipdl/ipdl/cxx/cgen.py | 5 ++++- + ipc/ipdl/ipdl/lower.py | 2 +- + 4 files changed, 10 insertions(+), 5 deletions(-) + +diff --git ipc/ipdl/ipdl/cxx/ast.py ipc/ipdl/ipdl/cxx/ast.py +index 3180a65..c2d945b 100644 +--- ipc/ipdl/ipdl/cxx/ast.py ++++ ipc/ipdl/ipdl/cxx/ast.py +@@ -336,12 +336,13 @@ Type.VOID = Type('void') + Type.VOIDPTR = Type('void', ptr=1) + + class TypeArray(Node): +- def __init__(self, basetype, nmemb): +- '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr''' ++ def __init__(self, basetype, nmemb, alignType): ++ '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr, |alignType| is a type''' + self.basetype = basetype + self.nmemb = nmemb ++ self.alignType = alignType + def __deepcopy__(self, memo): +- return TypeArray(deepcopy(self.basetype, memo), nmemb) ++ return TypeArray(deepcopy(self.basetype, memo), nmemb, alignType) + + class TypeEnum(Node): + def __init__(self, name=None): +diff --git ipc/ipdl/ipdl/cxx/cgen.py ipc/ipdl/ipdl/cxx/cgen.py +index 48b0988..bc914cf 100644 +--- ipc/ipdl/ipdl/cxx/cgen.py ++++ ipc/ipdl/ipdl/cxx/cgen.py +@@ -101,6 +101,7 @@ class CxxCodeGen(CodePrinter, Visitor): + def visitDecl(self, d): + # C-syntax arrays make code generation much more annoying + if isinstance(d.type, TypeArray): ++ self.write('MOZ_ALIGNED_DECL(') + d.type.basetype.accept(self) + else: + d.type.accept(self) +@@ -111,7 +112,9 @@ class CxxCodeGen(CodePrinter, Visitor): + if isinstance(d.type, TypeArray): + self.write('[') + d.type.nmemb.accept(self) +- self.write(']') ++ self.write('], MOZ_ALIGNOF(') ++ d.type.alignType.accept(self) ++ self.write('))') + + def visitParam(self, p): + self.visitDecl(p) +diff --git ipc/ipdl/ipdl/lower.py ipc/ipdl/ipdl/lower.py +index e97a34c..9360f3c 100644 +--- ipc/ipdl/ipdl/lower.py ++++ ipc/ipdl/ipdl/lower.py +@@ -768,7 +768,7 @@ IPDL union type.""" + if self.recursive: + return self.ptrToType() + else: +- return TypeArray(Type('char'), ExprSizeof(self.internalType())) ++ return TypeArray(Type('char'), ExprSizeof(self.internalType()), self.internalType()) + + def unionValue(self): + # NB: knows that Union's storage C union is named |mValue| Added: trunk/www/firefox-nightly/files/patch-bug779713 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox-nightly/files/patch-bug779713 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,77 @@ +diff --git mfbt/Alignment.h mfbt/Alignment.h +index e0843ca..353ec36 100644 +--- mfbt/Alignment.h ++++ mfbt/Alignment.h +@@ -9,11 +9,20 @@ + #ifndef mozilla_Alignment_h + #define mozilla_Alignment_h + ++#include "mozilla/Attributes.h" ++ + #include + #include + + namespace mozilla { + ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++#define MOZ_ALIGNOF(T) alignof(T) ++#elif defined(__GNUC__) ++#define MOZ_ALIGNOF(T) __alignof__(T) ++#elif defined(_MSC_VER) ++#define MOZ_ALIGNOF(T) __alignof(T) ++#else + /* + * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many + * bytes of alignment a given type needs. +@@ -32,6 +41,7 @@ public: + }; + + #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment ++#endif + + /* + * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. +@@ -43,7 +53,10 @@ public: + * will declare a two-character array |arr| aligned to 8 bytes. + */ + +-#if defined(__GNUC__) ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++# define MOZ_ALIGNED_DECL(_type, _align) \ ++ alignas(_align) _type ++#elif defined(__GNUC__) + # define MOZ_ALIGNED_DECL(_type, _align) \ + _type __attribute__((aligned(_align))) + #elif defined(_MSC_VER) +diff --git mfbt/Attributes.h mfbt/Attributes.h +index d317766..ddb13da 100644 +--- mfbt/Attributes.h ++++ mfbt/Attributes.h +@@ -51,6 +51,7 @@ + * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug + */ + # if _MSC_VER >= 1800 ++# define MOZ_HAVE_CXX11_ALIGNAS + # define MOZ_HAVE_CXX11_DELETE + # endif + # if _MSC_VER >= 1700 +@@ -74,6 +75,9 @@ + # ifndef __has_extension + # define __has_extension __has_feature /* compatibility, for older versions of clang */ + # endif ++# if __has_extension(cxx_alignas) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if __has_extension(cxx_constexpr) + # define MOZ_HAVE_CXX11_CONSTEXPR + # endif +@@ -95,6 +99,9 @@ + # endif + #elif defined(__GNUC__) + # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L ++# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) + # define MOZ_HAVE_CXX11_OVERRIDE + # define MOZ_HAVE_CXX11_FINAL final Added: trunk/www/firefox/files/patch-bug1026499 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox/files/patch-bug1026499 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,68 @@ +commit 8d0efe4 +Author: Martin Husemann +Date: Wed Jun 18 18:12:22 2014 +0200 + + Bug 1026499 - Use MOZ_ALIGNED_DECL to declare union members in ipdl value declarations. r=bsmedberg +--- + ipc/ipdl/ipdl/cxx/ast.py | 7 ++++--- + ipc/ipdl/ipdl/cxx/cgen.py | 5 ++++- + ipc/ipdl/ipdl/lower.py | 2 +- + 4 files changed, 10 insertions(+), 5 deletions(-) + +diff --git ipc/ipdl/ipdl/cxx/ast.py ipc/ipdl/ipdl/cxx/ast.py +index 3180a65..c2d945b 100644 +--- ipc/ipdl/ipdl/cxx/ast.py ++++ ipc/ipdl/ipdl/cxx/ast.py +@@ -336,12 +336,13 @@ Type.VOID = Type('void') + Type.VOIDPTR = Type('void', ptr=1) + + class TypeArray(Node): +- def __init__(self, basetype, nmemb): +- '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr''' ++ def __init__(self, basetype, nmemb, alignType): ++ '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr, |alignType| is a type''' + self.basetype = basetype + self.nmemb = nmemb ++ self.alignType = alignType + def __deepcopy__(self, memo): +- return TypeArray(deepcopy(self.basetype, memo), nmemb) ++ return TypeArray(deepcopy(self.basetype, memo), nmemb, alignType) + + class TypeEnum(Node): + def __init__(self, name=None): +diff --git ipc/ipdl/ipdl/cxx/cgen.py ipc/ipdl/ipdl/cxx/cgen.py +index 48b0988..bc914cf 100644 +--- ipc/ipdl/ipdl/cxx/cgen.py ++++ ipc/ipdl/ipdl/cxx/cgen.py +@@ -101,6 +101,7 @@ class CxxCodeGen(CodePrinter, Visitor): + def visitDecl(self, d): + # C-syntax arrays make code generation much more annoying + if isinstance(d.type, TypeArray): ++ self.write('MOZ_ALIGNED_DECL(') + d.type.basetype.accept(self) + else: + d.type.accept(self) +@@ -111,7 +112,9 @@ class CxxCodeGen(CodePrinter, Visitor): + if isinstance(d.type, TypeArray): + self.write('[') + d.type.nmemb.accept(self) +- self.write(']') ++ self.write('], MOZ_ALIGNOF(') ++ d.type.alignType.accept(self) ++ self.write('))') + + def visitParam(self, p): + self.visitDecl(p) +diff --git ipc/ipdl/ipdl/lower.py ipc/ipdl/ipdl/lower.py +index e97a34c..9360f3c 100644 +--- ipc/ipdl/ipdl/lower.py ++++ ipc/ipdl/ipdl/lower.py +@@ -768,7 +768,7 @@ IPDL union type.""" + if self.recursive: + return self.ptrToType() + else: +- return TypeArray(Type('char'), ExprSizeof(self.internalType())) ++ return TypeArray(Type('char'), ExprSizeof(self.internalType()), self.internalType()) + + def unionValue(self): + # NB: knows that Union's storage C union is named |mValue| Added: trunk/www/firefox/files/patch-bug779713 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox/files/patch-bug779713 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,77 @@ +diff --git mfbt/Alignment.h mfbt/Alignment.h +index e0843ca..353ec36 100644 +--- mfbt/Alignment.h ++++ mfbt/Alignment.h +@@ -9,11 +9,20 @@ + #ifndef mozilla_Alignment_h + #define mozilla_Alignment_h + ++#include "mozilla/Attributes.h" ++ + #include + #include + + namespace mozilla { + ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++#define MOZ_ALIGNOF(T) alignof(T) ++#elif defined(__GNUC__) ++#define MOZ_ALIGNOF(T) __alignof__(T) ++#elif defined(_MSC_VER) ++#define MOZ_ALIGNOF(T) __alignof(T) ++#else + /* + * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many + * bytes of alignment a given type needs. +@@ -32,6 +41,7 @@ public: + }; + + #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment ++#endif + + /* + * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. +@@ -43,7 +53,10 @@ public: + * will declare a two-character array |arr| aligned to 8 bytes. + */ + +-#if defined(__GNUC__) ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++# define MOZ_ALIGNED_DECL(_type, _align) \ ++ alignas(_align) _type ++#elif defined(__GNUC__) + # define MOZ_ALIGNED_DECL(_type, _align) \ + _type __attribute__((aligned(_align))) + #elif defined(_MSC_VER) +diff --git mfbt/Attributes.h mfbt/Attributes.h +index d317766..ddb13da 100644 +--- mfbt/Attributes.h ++++ mfbt/Attributes.h +@@ -54,6 +54,9 @@ + # ifndef __has_extension + # define __has_extension __has_feature /* compatibility, for older versions of clang */ + # endif ++# if __has_extension(cxx_alignas) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if __has_extension(cxx_constexpr) + # define MOZ_HAVE_CXX11_CONSTEXPR + # endif +@@ -75,6 +78,9 @@ + # endif + #elif defined(__GNUC__) + # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L ++# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) + # define MOZ_HAVE_CXX11_OVERRIDE + # define MOZ_HAVE_CXX11_FINAL final +@@ -96,6 +102,7 @@ + # define MOZ_HAVE_NORETURN __attribute__((noreturn)) + #elif defined(_MSC_VER) + # if _MSC_VER >= 1800 ++# define MOZ_HAVE_CXX11_ALIGNAS + # define MOZ_HAVE_CXX11_DELETE + # endif + # if _MSC_VER >= 1700 Added: trunk/www/libxul/files/patch-bug1026499 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/libxul/files/patch-bug1026499 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,68 @@ +commit 8d0efe4 +Author: Martin Husemann +Date: Wed Jun 18 18:12:22 2014 +0200 + + Bug 1026499 - Use MOZ_ALIGNED_DECL to declare union members in ipdl value declarations. r=bsmedberg +--- + ipc/ipdl/ipdl/cxx/ast.py | 7 ++++--- + ipc/ipdl/ipdl/cxx/cgen.py | 5 ++++- + ipc/ipdl/ipdl/lower.py | 2 +- + 4 files changed, 10 insertions(+), 5 deletions(-) + +diff --git ipc/ipdl/ipdl/cxx/ast.py ipc/ipdl/ipdl/cxx/ast.py +index 3180a65..c2d945b 100644 +--- ipc/ipdl/ipdl/cxx/ast.py ++++ ipc/ipdl/ipdl/cxx/ast.py +@@ -336,12 +336,13 @@ Type.VOID = Type('void') + Type.VOIDPTR = Type('void', ptr=1) + + class TypeArray(Node): +- def __init__(self, basetype, nmemb): +- '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr''' ++ def __init__(self, basetype, nmemb, alignType): ++ '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr, |alignType| is a type''' + self.basetype = basetype + self.nmemb = nmemb ++ self.alignType = alignType + def __deepcopy__(self, memo): +- return TypeArray(deepcopy(self.basetype, memo), nmemb) ++ return TypeArray(deepcopy(self.basetype, memo), nmemb, alignType) + + class TypeEnum(Node): + def __init__(self, name=None): +diff --git ipc/ipdl/ipdl/cxx/cgen.py ipc/ipdl/ipdl/cxx/cgen.py +index 48b0988..bc914cf 100644 +--- ipc/ipdl/ipdl/cxx/cgen.py ++++ ipc/ipdl/ipdl/cxx/cgen.py +@@ -101,6 +101,7 @@ class CxxCodeGen(CodePrinter, Visitor): + def visitDecl(self, d): + # C-syntax arrays make code generation much more annoying + if isinstance(d.type, TypeArray): ++ self.write('MOZ_ALIGNED_DECL(') + d.type.basetype.accept(self) + else: + d.type.accept(self) +@@ -111,7 +112,9 @@ class CxxCodeGen(CodePrinter, Visitor): + if isinstance(d.type, TypeArray): + self.write('[') + d.type.nmemb.accept(self) +- self.write(']') ++ self.write('], MOZ_ALIGNOF(') ++ d.type.alignType.accept(self) ++ self.write('))') + + def visitParam(self, p): + self.visitDecl(p) +diff --git ipc/ipdl/ipdl/lower.py ipc/ipdl/ipdl/lower.py +index e97a34c..9360f3c 100644 +--- ipc/ipdl/ipdl/lower.py ++++ ipc/ipdl/ipdl/lower.py +@@ -768,7 +768,7 @@ IPDL union type.""" + if self.recursive: + return self.ptrToType() + else: +- return TypeArray(Type('char'), ExprSizeof(self.internalType())) ++ return TypeArray(Type('char'), ExprSizeof(self.internalType()), self.internalType()) + + def unionValue(self): + # NB: knows that Union's storage C union is named |mValue| Added: trunk/www/libxul/files/patch-bug779713 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/libxul/files/patch-bug779713 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,72 @@ +diff --git mfbt/Util.h mfbt/Util.h +index e0843ca..353ec36 100644 +--- mfbt/Util.h ++++ mfbt/Util.h +@@ -19,6 +19,13 @@ + + namespace mozilla { + ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++#define MOZ_ALIGNOF(T) alignof(T) ++#elif defined(__GNUC__) ++#define MOZ_ALIGNOF(T) __alignof__(T) ++#elif defined(_MSC_VER) ++#define MOZ_ALIGNOF(T) __alignof(T) ++#else + /* + * This class, and the corresponding macro MOZ_ALIGNOF, figure out how many + * bytes of alignment a given type needs. +@@ -37,6 +44,7 @@ class AlignmentFinder + }; + + #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment ++#endif + + /* + * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. +@@ -48,7 +56,10 @@ class AlignmentFinder + * will declare a two-character array |arr| aligned to 8 bytes. + */ + +-#if defined(__GNUC__) ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++# define MOZ_ALIGNED_DECL(_type, _align) \ ++ alignas(_align) _type ++#elif defined(__GNUC__) + # define MOZ_ALIGNED_DECL(_type, _align) \ + _type __attribute__((aligned(_align))) + #elif defined(_MSC_VER) +diff --git mfbt/Attributes.h mfbt/Attributes.h +index d317766..ddb13da 100644 +--- mfbt/Attributes.h ++++ mfbt/Attributes.h +@@ -67,6 +67,9 @@ + # ifndef __has_extension + # define __has_extension __has_feature /* compatibility, for older versions of clang */ + # endif ++# if __has_extension(cxx_alignas) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if __has_extension(cxx_constexpr) + # define MOZ_HAVE_CXX11_CONSTEXPR + # endif +@@ -85,6 +88,9 @@ + # endif + #elif defined(__GNUC__) + # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L ++# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) + # define MOZ_HAVE_CXX11_OVERRIDE + # define MOZ_HAVE_CXX11_FINAL final +@@ -102,6 +108,9 @@ + # define MOZ_HAVE_NEVER_INLINE __attribute__((noinline)) + # define MOZ_HAVE_NORETURN __attribute__((noreturn)) + #elif defined(_MSC_VER) ++# if _MSC_VER >= 1800 ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if _MSC_VER >= 1700 + # define MOZ_HAVE_CXX11_FINAL final + # else Added: trunk/www/seamonkey/files/patch-bug1026499 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/seamonkey/files/patch-bug1026499 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,68 @@ +commit 8d0efe4 +Author: Martin Husemann +Date: Wed Jun 18 18:12:22 2014 +0200 + + Bug 1026499 - Use MOZ_ALIGNED_DECL to declare union members in ipdl value declarations. r=bsmedberg +--- + ipc/ipdl/ipdl/cxx/ast.py | 7 ++++--- + ipc/ipdl/ipdl/cxx/cgen.py | 5 ++++- + ipc/ipdl/ipdl/lower.py | 2 +- + 4 files changed, 10 insertions(+), 5 deletions(-) + +diff --git ipc/ipdl/ipdl/cxx/ast.py ipc/ipdl/ipdl/cxx/ast.py +index 3180a65..c2d945b 100644 +--- mozilla/ipc/ipdl/ipdl/cxx/ast.py ++++ mozilla/ipc/ipdl/ipdl/cxx/ast.py +@@ -336,12 +336,13 @@ Type.VOID = Type('void') + Type.VOIDPTR = Type('void', ptr=1) + + class TypeArray(Node): +- def __init__(self, basetype, nmemb): +- '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr''' ++ def __init__(self, basetype, nmemb, alignType): ++ '''the type |basetype DECLNAME[nmemb]|. |nmemb| is an Expr, |alignType| is a type''' + self.basetype = basetype + self.nmemb = nmemb ++ self.alignType = alignType + def __deepcopy__(self, memo): +- return TypeArray(deepcopy(self.basetype, memo), nmemb) ++ return TypeArray(deepcopy(self.basetype, memo), nmemb, alignType) + + class TypeEnum(Node): + def __init__(self, name=None): +diff --git ipc/ipdl/ipdl/cxx/cgen.py ipc/ipdl/ipdl/cxx/cgen.py +index 48b0988..bc914cf 100644 +--- mozilla/ipc/ipdl/ipdl/cxx/cgen.py ++++ mozilla/ipc/ipdl/ipdl/cxx/cgen.py +@@ -101,6 +101,7 @@ class CxxCodeGen(CodePrinter, Visitor): + def visitDecl(self, d): + # C-syntax arrays make code generation much more annoying + if isinstance(d.type, TypeArray): ++ self.write('MOZ_ALIGNED_DECL(') + d.type.basetype.accept(self) + else: + d.type.accept(self) +@@ -111,7 +112,9 @@ class CxxCodeGen(CodePrinter, Visitor): + if isinstance(d.type, TypeArray): + self.write('[') + d.type.nmemb.accept(self) +- self.write(']') ++ self.write('], MOZ_ALIGNOF(') ++ d.type.alignType.accept(self) ++ self.write('))') + + def visitParam(self, p): + self.visitDecl(p) +diff --git ipc/ipdl/ipdl/lower.py ipc/ipdl/ipdl/lower.py +index e97a34c..9360f3c 100644 +--- mozilla/ipc/ipdl/ipdl/lower.py ++++ mozilla/ipc/ipdl/ipdl/lower.py +@@ -768,7 +768,7 @@ IPDL union type.""" + if self.recursive: + return self.ptrToType() + else: +- return TypeArray(Type('char'), ExprSizeof(self.internalType())) ++ return TypeArray(Type('char'), ExprSizeof(self.internalType()), self.internalType()) + + def unionValue(self): + # NB: knows that Union's storage C union is named |mValue| Added: trunk/www/seamonkey/files/patch-bug779713 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/seamonkey/files/patch-bug779713 Sun Jun 22 04:24:32 2014 (r1609) @@ -0,0 +1,77 @@ +diff --git mfbt/Alignment.h mfbt/Alignment.h +index e0843ca..353ec36 100644 +--- mozilla/mfbt/Alignment.h ++++ mozilla/mfbt/Alignment.h +@@ -9,11 +9,20 @@ + #ifndef mozilla_Alignment_h + #define mozilla_Alignment_h + ++#include "mozilla/Attributes.h" ++ + #include + #include + + namespace mozilla { + ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++#define MOZ_ALIGNOF(T) alignof(T) ++#elif defined(__GNUC__) ++#define MOZ_ALIGNOF(T) __alignof__(T) ++#elif defined(_MSC_VER) ++#define MOZ_ALIGNOF(T) __alignof(T) ++#else + /* + * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many + * bytes of alignment a given type needs. +@@ -32,6 +41,7 @@ public: + }; + + #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment ++#endif + + /* + * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. +@@ -43,7 +53,10 @@ public: + * will declare a two-character array |arr| aligned to 8 bytes. + */ + +-#if defined(__GNUC__) ++#if defined(MOZ_HAVE_CXX11_ALIGNAS) ++# define MOZ_ALIGNED_DECL(_type, _align) \ ++ alignas(_align) _type ++#elif defined(__GNUC__) + # define MOZ_ALIGNED_DECL(_type, _align) \ + _type __attribute__((aligned(_align))) + #elif defined(_MSC_VER) +diff --git mfbt/Attributes.h mfbt/Attributes.h +index d317766..ddb13da 100644 +--- mozilla/mfbt/Attributes.h ++++ mozilla/mfbt/Attributes.h +@@ -54,6 +54,9 @@ + # ifndef __has_extension + # define __has_extension __has_feature /* compatibility, for older versions of clang */ + # endif ++# if __has_extension(cxx_alignas) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if __has_extension(cxx_constexpr) + # define MOZ_HAVE_CXX11_CONSTEXPR + # endif +@@ -75,6 +78,9 @@ + # endif + #elif defined(__GNUC__) + # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L ++# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) ++# define MOZ_HAVE_CXX11_ALIGNAS ++# endif + # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) + # define MOZ_HAVE_CXX11_OVERRIDE + # define MOZ_HAVE_CXX11_FINAL final +@@ -96,6 +102,7 @@ + # define MOZ_HAVE_NORETURN __attribute__((noreturn)) + #elif defined(_MSC_VER) + # if _MSC_VER >= 1800 ++# define MOZ_HAVE_CXX11_ALIGNAS + # define MOZ_HAVE_CXX11_DELETE + # endif + # if _MSC_VER >= 1700