[llvm] - Backport support for C++0x (# 648990)

Michel Alexandre Salim salimma at fedoraproject.org
Fri Nov 12 15:12:21 UTC 2010


commit 3fc5264af263dea63d03c12ba457c750ccb4119a
Author: Michel Alexandre Salim <salimma at fedoraproject.org>
Date:   Fri Nov 12 16:12:10 2010 +0100

    - Backport support for C++0x (# 648990)

 clang-2.8-alignOf.patch |  199 +++++++++++++++++++++++++++++++++++++++++++++++
 llvm-2.8-alignOf.patch  |   59 ++++++++++++++
 llvm.spec               |   17 ++++-
 3 files changed, 272 insertions(+), 3 deletions(-)
---
diff --git a/clang-2.8-alignOf.patch b/clang-2.8-alignOf.patch
new file mode 100644
index 0000000..77aa521
--- /dev/null
+++ b/clang-2.8-alignOf.patch
@@ -0,0 +1,199 @@
+Index: lib/Basic/IdentifierTable.cpp
+===================================================================
+--- lib/Basic/IdentifierTable.cpp	(revision 117774)
++++ lib/Basic/IdentifierTable.cpp	(revision 117775)
+@@ -390,7 +390,7 @@
+   unsigned Size = sizeof(MultiKeywordSelector) + nKeys*sizeof(IdentifierInfo *);
+   MultiKeywordSelector *SI =
+     (MultiKeywordSelector*)SelTabImpl.Allocator.Allocate(Size,
+-                                         llvm::alignof<MultiKeywordSelector>());
++                                         llvm::alignOf<MultiKeywordSelector>());
+   new (SI) MultiKeywordSelector(nKeys, IIV);
+   SelTabImpl.Table.InsertNode(SI, InsertPos);
+   return Selector(SI);
+Index: lib/AST/ExprCXX.cpp
+===================================================================
+--- lib/AST/ExprCXX.cpp	(revision 117774)
++++ lib/AST/ExprCXX.cpp	(revision 117775)
+@@ -233,7 +233,7 @@
+   if (NumTemplateArgs != 0)
+     size += ExplicitTemplateArgumentList::sizeFor(NumTemplateArgs);
+ 
+-  void *Mem = C.Allocate(size, llvm::alignof<UnresolvedLookupExpr>());
++  void *Mem = C.Allocate(size, llvm::alignOf<UnresolvedLookupExpr>());
+   UnresolvedLookupExpr *E = new (Mem) UnresolvedLookupExpr(EmptyShell());
+   E->HasExplicitTemplateArgs = NumTemplateArgs != 0;
+   return E;
+@@ -261,7 +261,7 @@
+   if (NumResults) {
+     Results = static_cast<DeclAccessPair *>(
+                                 C.Allocate(sizeof(DeclAccessPair) * NumResults, 
+-                                           llvm::alignof<DeclAccessPair>()));
++                                           llvm::alignOf<DeclAccessPair>()));
+     memcpy(Results, &*Begin.getIterator(), 
+            NumResults * sizeof(DeclAccessPair));
+   }
+@@ -737,7 +737,7 @@
+   if (TemplateArgs)
+     size += ExplicitTemplateArgumentList::sizeFor(*TemplateArgs);
+ 
+-  void *Mem = C.Allocate(size, llvm::alignof<CXXDependentScopeMemberExpr>());
++  void *Mem = C.Allocate(size, llvm::alignOf<CXXDependentScopeMemberExpr>());
+   return new (Mem) CXXDependentScopeMemberExpr(C, Base, BaseType,
+                                                IsArrow, OperatorLoc,
+                                                Qualifier, QualifierRange,
+@@ -756,7 +756,7 @@
+ 
+   std::size_t size = sizeof(CXXDependentScopeMemberExpr) +
+                      ExplicitTemplateArgumentList::sizeFor(NumTemplateArgs);
+-  void *Mem = C.Allocate(size, llvm::alignof<CXXDependentScopeMemberExpr>());
++  void *Mem = C.Allocate(size, llvm::alignOf<CXXDependentScopeMemberExpr>());
+   CXXDependentScopeMemberExpr *E
+     =  new (Mem) CXXDependentScopeMemberExpr(C, 0, QualType(),
+                                              0, SourceLocation(), 0,
+@@ -812,7 +812,7 @@
+   if (TemplateArgs)
+     size += ExplicitTemplateArgumentList::sizeFor(*TemplateArgs);
+ 
+-  void *Mem = C.Allocate(size, llvm::alignof<UnresolvedMemberExpr>());
++  void *Mem = C.Allocate(size, llvm::alignOf<UnresolvedMemberExpr>());
+   return new (Mem) UnresolvedMemberExpr(C, 
+                              Dependent ? C.DependentTy : C.OverloadTy,
+                              Dependent, HasUnresolvedUsing, Base, BaseType,
+@@ -826,7 +826,7 @@
+   if (NumTemplateArgs != 0)
+     size += ExplicitTemplateArgumentList::sizeFor(NumTemplateArgs);
+ 
+-  void *Mem = C.Allocate(size, llvm::alignof<UnresolvedMemberExpr>());
++  void *Mem = C.Allocate(size, llvm::alignOf<UnresolvedMemberExpr>());
+   UnresolvedMemberExpr *E = new (Mem) UnresolvedMemberExpr(EmptyShell());
+   E->HasExplicitTemplateArgs = NumTemplateArgs != 0;
+   return E;
+Index: lib/AST/DeclObjC.cpp
+===================================================================
+--- lib/AST/DeclObjC.cpp	(revision 117774)
++++ lib/AST/DeclObjC.cpp	(revision 117775)
+@@ -711,7 +711,7 @@
+ void ObjCClassDecl::setClassList(ASTContext &C, ObjCInterfaceDecl*const*List,
+                                  const SourceLocation *Locs, unsigned Num) {
+   ForwardDecls = (ObjCClassRef*) C.Allocate(sizeof(ObjCClassRef)*Num,
+-                                            llvm::alignof<ObjCClassRef>());
++                                            llvm::alignOf<ObjCClassRef>());
+   for (unsigned i = 0; i < Num; ++i)
+     new (&ForwardDecls[i]) ObjCClassRef(List[i], Locs[i]);
+   
+Index: lib/AST/Stmt.cpp
+===================================================================
+--- lib/AST/Stmt.cpp	(revision 117774)
++++ lib/AST/Stmt.cpp	(revision 117775)
+@@ -416,7 +416,7 @@
+                                      Stmt *atFinallyStmt) {
+   unsigned Size = sizeof(ObjCAtTryStmt) + 
+     (1 + NumCatchStmts + (atFinallyStmt != 0)) * sizeof(Stmt *);
+-  void *Mem = Context.Allocate(Size, llvm::alignof<ObjCAtTryStmt>());
++  void *Mem = Context.Allocate(Size, llvm::alignOf<ObjCAtTryStmt>());
+   return new (Mem) ObjCAtTryStmt(atTryLoc, atTryStmt, CatchStmts, NumCatchStmts,
+                                  atFinallyStmt);
+ }
+@@ -426,7 +426,7 @@
+                                                  bool HasFinally) {
+   unsigned Size = sizeof(ObjCAtTryStmt) + 
+     (1 + NumCatchStmts + HasFinally) * sizeof(Stmt *);
+-  void *Mem = Context.Allocate(Size, llvm::alignof<ObjCAtTryStmt>());
++  void *Mem = Context.Allocate(Size, llvm::alignOf<ObjCAtTryStmt>());
+   return new (Mem) ObjCAtTryStmt(EmptyShell(), NumCatchStmts, HasFinally);  
+ }
+ 
+@@ -448,7 +448,7 @@
+   std::size_t Size = sizeof(CXXTryStmt);
+   Size += ((numHandlers + 1) * sizeof(Stmt));
+ 
+-  void *Mem = C.Allocate(Size, llvm::alignof<CXXTryStmt>());
++  void *Mem = C.Allocate(Size, llvm::alignOf<CXXTryStmt>());
+   return new (Mem) CXXTryStmt(tryLoc, tryBlock, handlers, numHandlers);
+ }
+ 
+@@ -457,7 +457,7 @@
+   std::size_t Size = sizeof(CXXTryStmt);
+   Size += ((numHandlers + 1) * sizeof(Stmt));
+ 
+-  void *Mem = C.Allocate(Size, llvm::alignof<CXXTryStmt>());
++  void *Mem = C.Allocate(Size, llvm::alignOf<CXXTryStmt>());
+   return new (Mem) CXXTryStmt(Empty, numHandlers);
+ }
+ 
+Index: lib/AST/Expr.cpp
+===================================================================
+--- lib/AST/Expr.cpp	(revision 117774)
++++ lib/AST/Expr.cpp	(revision 117775)
+@@ -257,7 +257,7 @@
+   if (TemplateArgs)
+     Size += ExplicitTemplateArgumentList::sizeFor(*TemplateArgs);
+   
+-  void *Mem = Context.Allocate(Size, llvm::alignof<DeclRefExpr>());
++  void *Mem = Context.Allocate(Size, llvm::alignOf<DeclRefExpr>());
+   return new (Mem) DeclRefExpr(Qualifier, QualifierRange, D, NameInfo,
+                                TemplateArgs, T);
+ }
+@@ -271,7 +271,7 @@
+   if (NumTemplateArgs)
+     Size += ExplicitTemplateArgumentList::sizeFor(NumTemplateArgs);
+   
+-  void *Mem = Context.Allocate(Size, llvm::alignof<DeclRefExpr>());
++  void *Mem = Context.Allocate(Size, llvm::alignOf<DeclRefExpr>());
+   return new (Mem) DeclRefExpr(EmptyShell());
+ }
+ 
+@@ -432,7 +432,7 @@
+   // any concatenated string tokens.
+   void *Mem = C.Allocate(sizeof(StringLiteral)+
+                          sizeof(SourceLocation)*(NumStrs-1),
+-                         llvm::alignof<StringLiteral>());
++                         llvm::alignOf<StringLiteral>());
+   StringLiteral *SL = new (Mem) StringLiteral(Ty);
+ 
+   // OPTIMIZE: could allocate this appended to the StringLiteral.
+@@ -452,7 +452,7 @@
+ StringLiteral *StringLiteral::CreateEmpty(ASTContext &C, unsigned NumStrs) {
+   void *Mem = C.Allocate(sizeof(StringLiteral)+
+                          sizeof(SourceLocation)*(NumStrs-1),
+-                         llvm::alignof<StringLiteral>());
++                         llvm::alignOf<StringLiteral>());
+   StringLiteral *SL = new (Mem) StringLiteral(QualType());
+   SL->StrData = 0;
+   SL->ByteLength = 0;
+@@ -714,7 +714,7 @@
+   if (targs)
+     Size += ExplicitTemplateArgumentList::sizeFor(*targs);
+ 
+-  void *Mem = C.Allocate(Size, llvm::alignof<MemberExpr>());
++  void *Mem = C.Allocate(Size, llvm::alignOf<MemberExpr>());
+   MemberExpr *E = new (Mem) MemberExpr(base, isarrow, memberdecl, nameinfo, ty);
+ 
+   if (hasQualOrFound) {
+Index: lib/AST/DeclCXX.cpp
+===================================================================
+--- lib/AST/DeclCXX.cpp	(revision 117774)
++++ lib/AST/DeclCXX.cpp	(revision 117775)
+@@ -1057,7 +1057,7 @@
+                                    unsigned NumIndices) {
+   void *Mem = Context.Allocate(sizeof(CXXBaseOrMemberInitializer) +
+                                sizeof(VarDecl *) * NumIndices,
+-                               llvm::alignof<CXXBaseOrMemberInitializer>());
++                               llvm::alignOf<CXXBaseOrMemberInitializer>());
+   return new (Mem) CXXBaseOrMemberInitializer(Context, Member, MemberLoc,
+                                               L, Init, R, Indices, NumIndices);
+ }
+Index: lib/Lex/TokenLexer.cpp
+===================================================================
+--- lib/Lex/TokenLexer.cpp	(revision 117774)
++++ lib/Lex/TokenLexer.cpp	(revision 117775)
+@@ -287,7 +287,7 @@
+     llvm::BumpPtrAllocator &Alloc = PP.getPreprocessorAllocator();
+     Token *Res =
+       static_cast<Token *>(Alloc.Allocate(sizeof(Token)*ResultToks.size(),
+-                                          llvm::alignof<Token>()));
++                                          llvm::alignOf<Token>()));
+     if (NumTokens)
+       memcpy(Res, &ResultToks[0], NumTokens*sizeof(Token));
+     Tokens = Res;
diff --git a/llvm-2.8-alignOf.patch b/llvm-2.8-alignOf.patch
new file mode 100644
index 0000000..d48c10c
--- /dev/null
+++ b/llvm-2.8-alignOf.patch
@@ -0,0 +1,59 @@
+Index: include/llvm/ADT/StringMap.h
+===================================================================
+--- include/llvm/ADT/StringMap.h	(revision 117773)
++++ include/llvm/ADT/StringMap.h	(revision 117774)
+@@ -167,7 +167,7 @@
+ 
+     unsigned AllocSize = static_cast<unsigned>(sizeof(StringMapEntry))+
+       KeyLength+1;
+-    unsigned Alignment = alignof<StringMapEntry>();
++    unsigned Alignment = alignOf<StringMapEntry>();
+ 
+     StringMapEntry *NewItem =
+       static_cast<StringMapEntry*>(Allocator.Allocate(AllocSize,Alignment));
+Index: include/llvm/Support/AlignOf.h
+===================================================================
+--- include/llvm/Support/AlignOf.h	(revision 117773)
++++ include/llvm/Support/AlignOf.h	(revision 117774)
+@@ -49,12 +49,12 @@
+ 
+ };
+ 
+-/// alignof - A templated function that returns the mininum alignment of
++/// alignOf - A templated function that returns the mininum alignment of
+ ///  of a type.  This provides no extra functionality beyond the AlignOf
+ ///  class besides some cosmetic cleanliness.  Example usage:
+-///  alignof<int>() returns the alignment of an int.
++///  alignOf<int>() returns the alignment of an int.
+ template <typename T>
+-static inline unsigned alignof() { return AlignOf<T>::Alignment; }
++static inline unsigned alignOf() { return AlignOf<T>::Alignment; }
+ 
+ } // end namespace llvm
+ #endif
+Index: include/llvm/Support/Allocator.h
+===================================================================
+--- include/llvm/Support/Allocator.h	(revision 117773)
++++ include/llvm/Support/Allocator.h	(revision 117774)
+@@ -201,7 +201,7 @@
+       char *End = Slab == Allocator.CurSlab ? Allocator.CurPtr :
+                                               (char *)Slab + Slab->Size;
+       for (char *Ptr = (char*)(Slab+1); Ptr < End; Ptr += sizeof(T)) {
+-        Ptr = Allocator.AlignPtr(Ptr, alignof<T>());
++        Ptr = Allocator.AlignPtr(Ptr, alignOf<T>());
+         if (Ptr + sizeof(T) <= End)
+           reinterpret_cast<T*>(Ptr)->~T();
+       }
+Index: include/llvm/CodeGen/SlotIndexes.h
+===================================================================
+--- include/llvm/CodeGen/SlotIndexes.h	(revision 117773)
++++ include/llvm/CodeGen/SlotIndexes.h	(revision 117774)
+@@ -393,7 +393,7 @@
+       IndexListEntry *entry =
+         static_cast<IndexListEntry*>(
+           ileAllocator.Allocate(sizeof(IndexListEntry),
+-          alignof<IndexListEntry>()));
++          alignOf<IndexListEntry>()));
+ 
+       new (entry) IndexListEntry(mi, index);
+ 
diff --git a/llvm.spec b/llvm.spec
index d836736..047dfed 100644
--- a/llvm.spec
+++ b/llvm.spec
@@ -12,7 +12,7 @@
 
 Name:           llvm
 Version:        2.8
-Release:        3%{?dist}
+Release:        4%{?dist}
 Summary:        The Low Level Virtual Machine
 
 Group:          Development/Languages
@@ -22,6 +22,10 @@ Source0:        http://llvm.org/releases/%{version}/llvm-%{version}.tgz
 Source1:        http://llvm.org/releases/%{version}/clang-%{version}.tgz
 # Data files should be installed with timestamps preserved
 Patch0:         llvm-2.6-timestamp.patch
+# rename alignof -> alignOf for C++0x support
+# http://llvm.org/bugs/show_bug.cgi?id=8423
+Patch1:         llvm-2.8-alignOf.patch
+Patch2:         clang-2.8-alignOf.patch
 
 BuildRequires:  bison
 BuildRequires:  chrpath
@@ -191,6 +195,10 @@ HTML documentation for LLVM's OCaml binding.
 mv clang-%{version} tools/clang
 
 %patch0 -p1 -b .timestamp
+%patch1 -p0 -b .alignOf
+pushd tools/clang
+%patch2 -p0 -b .alignOf
+popd
 
 # Encoding fix
 #(cd tools/clang/docs && \
@@ -278,10 +286,10 @@ done
 rm -rf tools/clang/docs/{doxygen*,Makefile*,*.graffle,tools}
 
 
-#find %{buildroot} -name .dir -print0 | xargs -0r rm -f
+#find %%{buildroot} -name .dir -print0 | xargs -0r rm -f
 file %{buildroot}/%{_bindir}/* | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
 file %{buildroot}/%{_libdir}/llvm/*.so | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
-#chrpath -d %{buildroot}/%{_libexecdir}/clang-cc
+#chrpath -d %%{buildroot}/%%{_libexecdir}/clang-cc
 
 # Get rid of erroneously installed example files.
 rm %{buildroot}%{_libdir}/%{name}/*LLVMHello.*
@@ -383,6 +391,9 @@ find examples -name 'Makefile' | xargs -0r rm -f
 
 
 %changelog
+* Fri Nov 12 2010 Michel Salim <salimma at fedoraproject.org> - 2.8-4
+- Backport support for C++0x (# 648990)
+
 * Fri Oct 15 2010 Michel Salim <salimma at fedoraproject.org> - 2.8-3
 - Re-add omitted %%{_includedir}
 


More information about the scm-commits mailing list