Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Mar 2010 09:23:02 +0000 (UTC)
From:      Roman Divacky <rdivacky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r204793 - in vendor/clang/dist: docs docs/tools include/clang/AST include/clang/Basic include/clang/Checker/PathSensitive include/clang/Driver include/clang/Frontend lib/AST lib/Basic l...
Message-ID:  <201003060923.o269N2oQ079458@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rdivacky
Date: Sat Mar  6 09:23:02 2010
New Revision: 204793
URL: http://svn.freebsd.org/changeset/base/204793

Log:
  Update clang to r97873.

Added:
  vendor/clang/dist/include/clang/Basic/BuiltinsARM.def
  vendor/clang/dist/lib/Headers/smmintrin.h
  vendor/clang/dist/test/Analysis/inline3.c
  vendor/clang/dist/test/CXX/class.derived/class.member.lookup/p8.cpp
  vendor/clang/dist/test/CXX/except/except.handle/p16.cpp
  vendor/clang/dist/test/CodeGen/attr-weakref.c
  vendor/clang/dist/test/CodeGen/attr-weakref2.c
  vendor/clang/dist/test/CodeGen/blockstret.c
  vendor/clang/dist/test/CodeGen/builtins-arm.c
  vendor/clang/dist/test/CodeGenCXX/mangle-local-class-names.cpp
  vendor/clang/dist/test/Rewriter/rewrite-static-block.mm
Deleted:
  vendor/clang/dist/test/CodeGen/asm-2.c
  vendor/clang/dist/test/CodeGen/asm-inout.c
Modified:
  vendor/clang/dist/docs/Makefile
  vendor/clang/dist/docs/tools/Makefile
  vendor/clang/dist/include/clang/AST/ASTContext.h
  vendor/clang/dist/include/clang/AST/DeclBase.h
  vendor/clang/dist/include/clang/Basic/Builtins.def
  vendor/clang/dist/include/clang/Basic/BuiltinsX86.def
  vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td
  vendor/clang/dist/include/clang/Basic/TargetBuiltins.h
  vendor/clang/dist/include/clang/Basic/TokenKinds.def
  vendor/clang/dist/include/clang/Checker/PathSensitive/Environment.h
  vendor/clang/dist/include/clang/Checker/PathSensitive/GRState.h
  vendor/clang/dist/include/clang/Checker/PathSensitive/SymbolManager.h
  vendor/clang/dist/include/clang/Driver/HostInfo.h
  vendor/clang/dist/include/clang/Driver/Options.td
  vendor/clang/dist/include/clang/Frontend/ASTUnit.h
  vendor/clang/dist/lib/AST/ASTContext.cpp
  vendor/clang/dist/lib/AST/DeclBase.cpp
  vendor/clang/dist/lib/Basic/Targets.cpp
  vendor/clang/dist/lib/Basic/Version.cpp
  vendor/clang/dist/lib/Checker/Environment.cpp
  vendor/clang/dist/lib/Checker/GRExprEngine.cpp
  vendor/clang/dist/lib/Checker/GRState.cpp
  vendor/clang/dist/lib/Checker/SymbolManager.cpp
  vendor/clang/dist/lib/CodeGen/CGBlocks.cpp
  vendor/clang/dist/lib/CodeGen/CGBlocks.h
  vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp
  vendor/clang/dist/lib/CodeGen/CGCXX.cpp
  vendor/clang/dist/lib/CodeGen/CGExpr.cpp
  vendor/clang/dist/lib/CodeGen/CGExprConstant.cpp
  vendor/clang/dist/lib/CodeGen/CGExprScalar.cpp
  vendor/clang/dist/lib/CodeGen/CGStmt.cpp
  vendor/clang/dist/lib/CodeGen/CodeGenFunction.h
  vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp
  vendor/clang/dist/lib/CodeGen/CodeGenModule.h
  vendor/clang/dist/lib/CodeGen/Mangle.cpp
  vendor/clang/dist/lib/CodeGen/Mangle.h
  vendor/clang/dist/lib/CodeGen/TargetInfo.cpp
  vendor/clang/dist/lib/CodeGen/TargetInfo.h
  vendor/clang/dist/lib/Driver/Driver.cpp
  vendor/clang/dist/lib/Driver/HostInfo.cpp
  vendor/clang/dist/lib/Driver/ToolChains.cpp
  vendor/clang/dist/lib/Driver/ToolChains.h
  vendor/clang/dist/lib/Frontend/ASTUnit.cpp
  vendor/clang/dist/lib/Frontend/CacheTokens.cpp
  vendor/clang/dist/lib/Frontend/InitHeaderSearch.cpp
  vendor/clang/dist/lib/Frontend/RewriteObjC.cpp
  vendor/clang/dist/lib/Lex/PPMacroExpansion.cpp
  vendor/clang/dist/lib/Sema/Sema.h
  vendor/clang/dist/lib/Sema/SemaDeclCXX.cpp
  vendor/clang/dist/lib/Sema/SemaExpr.cpp
  vendor/clang/dist/lib/Sema/SemaExprCXX.cpp
  vendor/clang/dist/lib/Sema/SemaInit.cpp
  vendor/clang/dist/lib/Sema/SemaOverload.cpp
  vendor/clang/dist/lib/Sema/SemaType.cpp
  vendor/clang/dist/lib/Sema/TreeTransform.h
  vendor/clang/dist/test/CodeGen/asm.c
  vendor/clang/dist/test/CodeGen/attributes.c
  vendor/clang/dist/test/CodeGen/builtins-x86.c
  vendor/clang/dist/test/CodeGen/builtins.c
  vendor/clang/dist/test/CodeGenObjC/id-isa-codegen.m
  vendor/clang/dist/test/Index/linkage.c
  vendor/clang/dist/test/Rewriter/rewrite-byref-vars.mm
  vendor/clang/dist/test/Rewriter/rewrite-nested-ivar.mm
  vendor/clang/dist/test/Rewriter/rewrite-protocol-qualified.mm
  vendor/clang/dist/test/Sema/block-byref-args.c
  vendor/clang/dist/test/Sema/scope-check.c
  vendor/clang/dist/test/SemaObjC/check-dup-objc-decls-1.m
  vendor/clang/dist/test/SemaObjC/unused.m
  vendor/clang/dist/test/lit.cfg
  vendor/clang/dist/tools/CIndex/CIndex.cpp
  vendor/clang/dist/tools/c-index-test/c-index-test.c

Modified: vendor/clang/dist/docs/Makefile
==============================================================================
--- vendor/clang/dist/docs/Makefile	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/docs/Makefile	Sat Mar  6 09:23:02 2010	(r204793)
@@ -48,11 +48,11 @@ generated:: doxygen
 
 install-html: $(PROJ_OBJ_DIR)/html.tar.gz
 	$(Echo) Installing HTML documentation
-	$(Verb) $(MKDIR) $(PROJ_docsdir)/html
-	$(Verb) $(MKDIR) $(PROJ_docsdir)/html/img
-	$(Verb) $(DataInstall) $(HTML) $(PROJ_docsdir)/html
-#	$(Verb) $(DataInstall) $(IMAGES) $(PROJ_docsdir)/html/img
-	$(Verb) $(DataInstall) $(PROJ_OBJ_DIR)/html.tar.gz $(PROJ_docsdir)
+	$(Verb) $(MKDIR) $(DESTDIR)$(PROJ_docsdir)/html
+	$(Verb) $(MKDIR) $(DESTDIR)$(PROJ_docsdir)/html/img
+	$(Verb) $(DataInstall) $(HTML) $(DESTDIR)$(PROJ_docsdir)/html
+#	$(Verb) $(DataInstall) $(IMAGES) $(DESTDIR)$(PROJ_docsdir)/html/img
+	$(Verb) $(DataInstall) $(PROJ_OBJ_DIR)/html.tar.gz $(DESTDIR)$(PROJ_docsdir)
 
 $(PROJ_OBJ_DIR)/html.tar.gz: $(HTML)
 	$(Echo) Packaging HTML documentation
@@ -63,11 +63,11 @@ $(PROJ_OBJ_DIR)/html.tar.gz: $(HTML)
 
 install-doxygen: doxygen
 	$(Echo) Installing doxygen documentation
-	$(Verb) $(MKDIR) $(PROJ_docsdir)/html/doxygen
-	$(Verb) $(DataInstall) $(PROJ_OBJ_DIR)/doxygen.tar.gz $(PROJ_docsdir)
+	$(Verb) $(MKDIR) $(DESTDIR)$(PROJ_docsdir)/html/doxygen
+	$(Verb) $(DataInstall) $(PROJ_OBJ_DIR)/doxygen.tar.gz $(DESTDIR)$(PROJ_docsdir)
 	$(Verb) cd $(PROJ_OBJ_DIR)/doxygen && \
 	  $(FIND) . -type f -exec \
-	    $(DataInstall) {} $(PROJ_docsdir)/html/doxygen \;
+	    $(DataInstall) {} $(DESTDIR)$(PROJ_docsdir)/html/doxygen \;
 
 doxygen: regendoc $(PROJ_OBJ_DIR)/doxygen.tar.gz
 
@@ -94,4 +94,4 @@ $(LLVM_SRC_ROOT)/docs/userloc.html:
 
 uninstall-local::
 	$(Echo) Uninstalling Documentation
-	$(Verb) $(RM) -rf $(PROJ_docsdir)
+	$(Verb) $(RM) -rf $(DESTDIR)$(PROJ_docsdir)

Modified: vendor/clang/dist/docs/tools/Makefile
==============================================================================
--- vendor/clang/dist/docs/tools/Makefile	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/docs/tools/Makefile	Sat Mar  6 09:23:02 2010	(r204793)
@@ -84,9 +84,9 @@ EXTRA_DIST := $(POD)
 clean-local::
 	$(Verb) $(RM) -f pod2htm*.*~~ $(HTML) $(MAN) $(PS)
 
-HTML_DIR := $(PROJ_docsdir)/html/clang
-MAN_DIR  := $(PROJ_mandir)/man1
-PS_DIR   := $(PROJ_docsdir)/ps
+HTML_DIR := $(DESTDIR)$(PROJ_docsdir)/html/clang
+MAN_DIR  := $(DESTDIR)$(PROJ_mandir)/man1
+PS_DIR   := $(DESTDIR)$(PROJ_docsdir)/ps
 
 install-html:: $(HTML)
 	$(Echo) Installing HTML Clang Tools Documentation

Modified: vendor/clang/dist/include/clang/AST/ASTContext.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/ASTContext.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/AST/ASTContext.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -621,7 +621,8 @@ public:
   /// given interface decl and the conforming protocol list.
   QualType getObjCObjectPointerType(QualType OIT,
                                     ObjCProtocolDecl **ProtocolList = 0,
-                                    unsigned NumProtocols = 0);
+                                    unsigned NumProtocols = 0,
+                                    unsigned Quals = 0);
 
   /// getTypeOfType - GCC extension.
   QualType getTypeOfExprType(Expr *e);

Modified: vendor/clang/dist/include/clang/AST/DeclBase.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/DeclBase.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/AST/DeclBase.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -268,7 +268,7 @@ public:
 
   /// setInvalidDecl - Indicates the Decl had a semantic error. This
   /// allows for graceful error recovery.
-  void setInvalidDecl(bool Invalid = true) { InvalidDecl = Invalid; }
+  void setInvalidDecl(bool Invalid = true);
   bool isInvalidDecl() const { return (bool) InvalidDecl; }
 
   /// isImplicit - Indicates whether the declaration was implicitly

Modified: vendor/clang/dist/include/clang/Basic/Builtins.def
==============================================================================
--- vendor/clang/dist/include/clang/Basic/Builtins.def	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Basic/Builtins.def	Sat Mar  6 09:23:02 2010	(r204793)
@@ -240,6 +240,11 @@ BUILTIN(__builtin_isinf_sign, "i.", "nc"
 BUILTIN(__builtin_isnan,      "i.", "nc")
 BUILTIN(__builtin_isnormal,   "i.", "nc")
 
+// FP signbit builtins
+BUILTIN(__builtin_signbit, "id", "nc")
+BUILTIN(__builtin_signbitf, "if", "nc")
+BUILTIN(__builtin_signbitl, "iLd", "nc")
+
 // Builtins for arithmetic.
 BUILTIN(__builtin_clz  , "iUi"  , "nc")
 BUILTIN(__builtin_clzl , "iULi" , "nc")

Added: vendor/clang/dist/include/clang/Basic/BuiltinsARM.def
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ vendor/clang/dist/include/clang/Basic/BuiltinsARM.def	Sat Mar  6 09:23:02 2010	(r204793)
@@ -0,0 +1,20 @@
+//===--- BuiltinsARM.def - ARM Builtin function database ----*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the ARM-specific builtin function database.  Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+// FIXME: This is just a placeholder. NEON intrinsics should be listed here.
+BUILTIN(__builtin_thread_pointer, "v*", "")
+
+#undef BUILTIN

Modified: vendor/clang/dist/include/clang/Basic/BuiltinsX86.def
==============================================================================
--- vendor/clang/dist/include/clang/Basic/BuiltinsX86.def	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Basic/BuiltinsX86.def	Sat Mar  6 09:23:02 2010	(r204793)
@@ -281,8 +281,8 @@ BUILTIN(__builtin_ia32_pmovzxwq128, "V2L
 BUILTIN(__builtin_ia32_pmuldq128, "V2LLiV4iV4i", "")
 BUILTIN(__builtin_ia32_pmulld128, "V4iV4iV4i", "")
 BUILTIN(__builtin_ia32_roundps, "V4fV4fi", "")
-BUILTIN(__builtin_ia32_roundss, "V4fV4fi", "")
-BUILTIN(__builtin_ia32_roundsd, "V2dV2di", "")
+BUILTIN(__builtin_ia32_roundss, "V4fV4fV4fi", "")
+BUILTIN(__builtin_ia32_roundsd, "V2dV2dV2di", "")
 BUILTIN(__builtin_ia32_roundpd, "V2dV2di", "")
 
 

Modified: vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td
==============================================================================
--- vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td	Sat Mar  6 09:23:02 2010	(r204793)
@@ -1587,11 +1587,12 @@ def err_undeclared_label_use : Error<"us
 def err_goto_into_protected_scope : Error<"illegal goto into protected scope">;
 def err_switch_into_protected_scope : Error<
   "illegal switch case into protected scope">;
-def err_indirect_goto_in_protected_scope : Error<
-  "illegal indirect goto in protected scope, unknown effect on scopes">;
-def err_addr_of_label_in_protected_scope : Error<
+def err_indirect_goto_in_protected_scope : Warning<
+  "illegal indirect goto in protected scope, unknown effect on scopes">,
+    InGroup<DiagGroup<"label-address-scope">>;
+def err_addr_of_label_in_protected_scope : Warning<
   "address taken of label in protected scope, jump to it would have "
-  "unknown effect on scope">;
+  "unknown effect on scope">, InGroup<DiagGroup<"label-address-scope">>;
 def note_protected_by_variable_init : Note<
   "jump bypasses variable initialization">;
 def note_protected_by_vla_typedef : Note<

Modified: vendor/clang/dist/include/clang/Basic/TargetBuiltins.h
==============================================================================
--- vendor/clang/dist/include/clang/Basic/TargetBuiltins.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Basic/TargetBuiltins.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -14,12 +14,13 @@
 #undef PPC
 
 namespace clang {
-  /// X86 builtins
-  namespace X86 {
+
+  /// ARM builtins
+  namespace ARM {
     enum {
         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
-#include "clang/Basic/BuiltinsX86.def"
+#include "clang/Basic/BuiltinsARM.def"
         LastTSBuiltin
     };
   }
@@ -33,6 +34,17 @@ namespace clang {
         LastTSBuiltin
     };
   }
+
+  /// X86 builtins
+  namespace X86 {
+    enum {
+        LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
+#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
+#include "clang/Basic/BuiltinsX86.def"
+        LastTSBuiltin
+    };
+  }
+
 } // end namespace clang.
 
 #endif

Modified: vendor/clang/dist/include/clang/Basic/TokenKinds.def
==============================================================================
--- vendor/clang/dist/include/clang/Basic/TokenKinds.def	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Basic/TokenKinds.def	Sat Mar  6 09:23:02 2010	(r204793)
@@ -336,8 +336,6 @@ KEYWORD(__declspec                  , KE
 KEYWORD(__cdecl                     , KEYALL)
 KEYWORD(__stdcall                   , KEYALL)
 KEYWORD(__fastcall                  , KEYALL)
-KEYWORD(__ptr64                     , KEYALL)
-KEYWORD(__w64                       , KEYALL)
 KEYWORD(__forceinline               , KEYALL)
 
 // Altivec Extension.
@@ -368,6 +366,8 @@ ALIAS("__volatile"   , volatile   , KEYA
 ALIAS("__volatile__" , volatile   , KEYALL)
 
 // Microsoft extensions which should be disabled in strict conformance mode
+KEYWORD(__ptr64                   , KEYMS)
+KEYWORD(__w64                     , KEYMS)
 ALIAS("_asm"         , asm        , KEYMS)
 ALIAS("_cdecl"       , __cdecl    , KEYMS)
 ALIAS("_fastcall"    , __fastcall , KEYMS)

Modified: vendor/clang/dist/include/clang/Checker/PathSensitive/Environment.h
==============================================================================
--- vendor/clang/dist/include/clang/Checker/PathSensitive/Environment.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Checker/PathSensitive/Environment.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -26,7 +26,6 @@
 
 namespace clang {
 
-class AnalysisContext;
 class EnvironmentManager;
 class ValueManager;
 class LiveVariables;
@@ -41,10 +40,9 @@ private:
 
   // Data.
   BindingsTy ExprBindings;
-  AnalysisContext *ACtx;
 
-  Environment(BindingsTy eb, AnalysisContext *aCtx)
-    : ExprBindings(eb), ACtx(aCtx) {}
+  Environment(BindingsTy eb)
+    : ExprBindings(eb) {}
 
 public:
   typedef BindingsTy::iterator iterator;
@@ -58,8 +56,6 @@ public:
 
   SVal GetSVal(const Stmt* Ex, ValueManager& ValMgr) const;
 
-  AnalysisContext &getAnalysisContext() const { return *ACtx; }
-
   /// Profile - Profile the contents of an Environment object for use
   ///  in a FoldingSet.
   static void Profile(llvm::FoldingSetNodeID& ID, const Environment* E) {
@@ -86,8 +82,8 @@ public:
   EnvironmentManager(llvm::BumpPtrAllocator& Allocator) : F(Allocator) {}
   ~EnvironmentManager() {}
 
-  Environment getInitialEnvironment(AnalysisContext *ACtx) {
-    return Environment(F.GetEmptyMap(), ACtx);
+  Environment getInitialEnvironment() {
+    return Environment(F.GetEmptyMap());
   }
 
   Environment BindExpr(Environment Env, const Stmt *S, SVal V,

Modified: vendor/clang/dist/include/clang/Checker/PathSensitive/GRState.h
==============================================================================
--- vendor/clang/dist/include/clang/Checker/PathSensitive/GRState.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Checker/PathSensitive/GRState.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -109,12 +109,6 @@ public:
     return *StateMgr;
   }
 
-  /// getAnalysisContext - Return the AnalysisContext associated with this
-  /// state.
-  AnalysisContext &getAnalysisContext() const {
-    return Env.getAnalysisContext();
-  }
-
   /// getEnvironment - Return the environment associated with this state.
   ///  The environment is the mapping from expressions to values.
   const Environment& getEnvironment() const { return Env; }
@@ -133,7 +127,6 @@ public:
   /// Profile - Profile the contents of a GRState object for use
   ///  in a FoldingSet.
   static void Profile(llvm::FoldingSetNodeID& ID, const GRState* V) {
-    // FIXME: Do we need to include the AnalysisContext in the profile?
     V->Env.Profile(ID);
     ID.AddPointer(V->St);
     V->GDM.Profile(ID);
@@ -337,12 +330,12 @@ public:
   };
 
   // Pretty-printing.
-  void print(llvm::raw_ostream& Out, const char *nl = "\n",
+  void print(llvm::raw_ostream& Out, CFG &C, const char *nl = "\n",
              const char *sep = "") const;
 
-  void printStdErr() const;
+  void printStdErr(CFG &C) const;
 
-  void printDOT(llvm::raw_ostream& Out) const;
+  void printDOT(llvm::raw_ostream& Out, CFG &C) const;
 };
 
 class GRStateSet {

Modified: vendor/clang/dist/include/clang/Checker/PathSensitive/SymbolManager.h
==============================================================================
--- vendor/clang/dist/include/clang/Checker/PathSensitive/SymbolManager.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Checker/PathSensitive/SymbolManager.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -331,23 +331,20 @@ class SymbolReaper {
 
   SetTy TheLiving;
   SetTy TheDead;
-  LiveVariables& Liveness;
+  const LocationContext *LCtx;
   SymbolManager& SymMgr;
-  const StackFrameContext *CurrentStackFrame;
 
 public:
-  SymbolReaper(LiveVariables& liveness, SymbolManager& symmgr,
-               const StackFrameContext *currentStackFrame)
-    : Liveness(liveness), SymMgr(symmgr), CurrentStackFrame(currentStackFrame)
-      {}
+  SymbolReaper(const LocationContext *ctx, SymbolManager& symmgr)
+    : LCtx(ctx), SymMgr(symmgr) {}
 
   ~SymbolReaper() {}
 
+  const LocationContext *getLocationContext() const { return LCtx; }
+
   bool isLive(SymbolRef sym);
 
-  bool isLive(const Stmt* Loc, const Stmt* ExprVal) const {
-    return Liveness.isLive(Loc, ExprVal);
-  }
+  bool isLive(const Stmt* Loc, const Stmt* ExprVal) const;
 
   bool isLive(const Stmt* Loc, const VarRegion *VR) const;
   

Modified: vendor/clang/dist/include/clang/Driver/HostInfo.h
==============================================================================
--- vendor/clang/dist/include/clang/Driver/HostInfo.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Driver/HostInfo.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -80,6 +80,8 @@ const HostInfo *createDragonFlyHostInfo(
                                         const llvm::Triple& Triple);
 const HostInfo *createLinuxHostInfo(const Driver &D,
                                     const llvm::Triple& Triple);
+const HostInfo *createTCEHostInfo(const Driver &D, 
+                                  const llvm::Triple& Triple);
 const HostInfo *createUnknownHostInfo(const Driver &D,
                                       const llvm::Triple& Triple);
 

Modified: vendor/clang/dist/include/clang/Driver/Options.td
==============================================================================
--- vendor/clang/dist/include/clang/Driver/Options.td	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Driver/Options.td	Sat Mar  6 09:23:02 2010	(r204793)
@@ -64,6 +64,7 @@ def clang_ignored_m_Group : OptionGroup<
 //   , => _COMMA
 //   = => _EQ
 //   C++ => CXX
+//   . => _
 
 // Developer Driver Options
 
@@ -420,6 +421,8 @@ def mno_sse2 : Flag<"-mno-sse2">, Group<
 def mno_sse3 : Flag<"-mno-sse3">, Group<m_x86_Features_Group>;
 def mno_sse4a : Flag<"-mno-sse4a">, Group<m_x86_Features_Group>;
 def mno_sse4 : Flag<"-mno-sse4">, Group<m_x86_Features_Group>;
+def mno_sse4_1 : Flag<"-mno-sse4.1">, Group<m_x86_Features_Group>;
+def mno_sse4_2 : Flag<"-mno-sse4.2">, Group<m_x86_Features_Group>;
 def mno_sse : Flag<"-mno-sse">, Group<m_x86_Features_Group>;
 def mno_ssse3 : Flag<"-mno-ssse3">, Group<m_x86_Features_Group>;
 
@@ -434,6 +437,8 @@ def msse2 : Flag<"-msse2">, Group<m_x86_
 def msse3 : Flag<"-msse3">, Group<m_x86_Features_Group>;
 def msse4a : Flag<"-msse4a">, Group<m_x86_Features_Group>;
 def msse4 : Flag<"-msse4">, Group<m_x86_Features_Group>;
+def msse4_1 : Flag<"-msse4.1">, Group<m_x86_Features_Group>;
+def msse4_2 : Flag<"-msse4.2">, Group<m_x86_Features_Group>;
 def msse : Flag<"-msse">, Group<m_x86_Features_Group>;
 def mssse3 : Flag<"-mssse3">, Group<m_x86_Features_Group>;
 def mthumb : Flag<"-mthumb">, Group<m_Group>;

Modified: vendor/clang/dist/include/clang/Frontend/ASTUnit.h
==============================================================================
--- vendor/clang/dist/include/clang/Frontend/ASTUnit.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/include/clang/Frontend/ASTUnit.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -88,11 +88,39 @@ class ASTUnit {
   /// \brief Temporary files that should be removed when the ASTUnit is 
   /// destroyed.
   llvm::SmallVector<llvm::sys::Path, 4> TemporaryFiles;
+
+  /// \brief Simple hack to allow us to assert that ASTUnit is not being
+  /// used concurrently, which is not supported.
+  ///
+  /// Clients should create instances of the ConcurrencyCheck class whenever
+  /// using the ASTUnit in a way that isn't intended to be concurrent, which is
+  /// just about any usage.
+  unsigned int ConcurrencyCheckValue;
+  static const unsigned int CheckLocked = 28573289;
+  static const unsigned int CheckUnlocked = 9803453;
   
   ASTUnit(const ASTUnit&); // DO NOT IMPLEMENT
   ASTUnit &operator=(const ASTUnit &); // DO NOT IMPLEMENT
-
+  
 public:
+  class ConcurrencyCheck {
+    volatile ASTUnit &Self;
+    
+  public:
+    explicit ConcurrencyCheck(ASTUnit &Self)
+      : Self(Self) 
+    { 
+      assert(Self.ConcurrencyCheckValue == CheckUnlocked && 
+             "Concurrent access to ASTUnit!");
+      Self.ConcurrencyCheckValue = CheckLocked;
+    }
+    
+    ~ConcurrencyCheck() {
+      Self.ConcurrencyCheckValue = CheckUnlocked;
+    }
+  };
+  friend class ConcurrencyCheck;
+  
   ASTUnit(bool MainFileIsAST);
   ~ASTUnit();
 

Modified: vendor/clang/dist/lib/AST/ASTContext.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/ASTContext.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/AST/ASTContext.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -2240,14 +2240,16 @@ static void SortAndUniqueProtocols(ObjCP
 /// the given interface decl and the conforming protocol list.
 QualType ASTContext::getObjCObjectPointerType(QualType InterfaceT,
                                               ObjCProtocolDecl **Protocols,
-                                              unsigned NumProtocols) {
+                                              unsigned NumProtocols,
+                                              unsigned Quals) {
   llvm::FoldingSetNodeID ID;
   ObjCObjectPointerType::Profile(ID, InterfaceT, Protocols, NumProtocols);
+  Qualifiers Qs = Qualifiers::fromCVRMask(Quals);
 
   void *InsertPos = 0;
   if (ObjCObjectPointerType *QT =
               ObjCObjectPointerTypes.FindNodeOrInsertPos(ID, InsertPos))
-    return QualType(QT, 0);
+    return getQualifiedType(QualType(QT, 0), Qs);
 
   // Sort the protocol list alphabetically to canonicalize it.
   QualType Canonical;
@@ -2282,7 +2284,7 @@ QualType ASTContext::getObjCObjectPointe
 
   Types.push_back(QType);
   ObjCObjectPointerTypes.InsertNode(QType, InsertPos);
-  return QualType(QType, 0);
+  return getQualifiedType(QualType(QType, 0), Qs);
 }
 
 /// getObjCInterfaceType - Return the unique reference to the type for the

Modified: vendor/clang/dist/lib/AST/DeclBase.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/DeclBase.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/AST/DeclBase.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -46,6 +46,16 @@ const char *Decl::getDeclKindName() cons
   }
 }
 
+void Decl::setInvalidDecl(bool Invalid) {
+  InvalidDecl = Invalid;
+  if (Invalid) {
+    // Defensive maneuver for ill-formed code: we're likely not to make it to
+    // a point where we set the access specifier, so default it to "public"
+    // to avoid triggering asserts elsewhere in the front end. 
+    setAccess(AS_public);
+  }
+}
+
 const char *DeclContext::getDeclKindName() const {
   switch (DeclKind) {
   default: assert(0 && "Declaration context not in DeclNodes.def!");

Modified: vendor/clang/dist/lib/Basic/Targets.cpp
==============================================================================
--- vendor/clang/dist/lib/Basic/Targets.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/Basic/Targets.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -734,8 +734,10 @@ void X86TargetInfo::getDefaultFeatures(c
 bool X86TargetInfo::setFeatureEnabled(llvm::StringMap<bool> &Features,
                                       const std::string &Name,
                                       bool Enabled) const {
-  // FIXME: This *really* should not be here.
-  if (!Features.count(Name) && Name != "sse4")
+  // FIXME: This *really* should not be here.  We need some way of translating
+  // options into llvm subtarget features.
+  if (!Features.count(Name) &&
+      (Name != "sse4" && Name != "sse4.2" && Name != "sse4.1"))
     return false;
 
   if (Enabled) {
@@ -751,9 +753,12 @@ bool X86TargetInfo::setFeatureEnabled(ll
     else if (Name == "ssse3")
       Features["mmx"] = Features["sse"] = Features["sse2"] = Features["sse3"] =
         Features["ssse3"] = true;
-    else if (Name == "sse4")
+    else if (Name == "sse4" || Name == "sse4.2")
       Features["mmx"] = Features["sse"] = Features["sse2"] = Features["sse3"] =
         Features["ssse3"] = Features["sse41"] = Features["sse42"] = true;
+    else if (Name == "sse4.1")
+      Features["mmx"] = Features["sse"] = Features["sse2"] = Features["sse3"] =
+        Features["ssse3"] = Features["sse41"] = true;
     else if (Name == "3dnow")
       Features["3dnowa"] = true;
     else if (Name == "3dnowa")
@@ -775,6 +780,10 @@ bool X86TargetInfo::setFeatureEnabled(ll
       Features["ssse3"] = Features["sse41"] = Features["sse42"] = false;
     else if (Name == "sse4")
       Features["sse41"] = Features["sse42"] = false;
+    else if (Name == "sse4.2")
+      Features["sse42"] = false;
+    else if (Name == "sse4.1")
+      Features["sse41"] = Features["sse42"] = false;
     else if (Name == "3dnow")
       Features["3dnow"] = Features["3dnowa"] = false;
     else if (Name == "3dnowa")
@@ -1207,6 +1216,8 @@ class ARMTargetInfo : public TargetInfo 
   unsigned SoftFloat : 1;
   unsigned SoftFloatABI : 1;
 
+  static const Builtin::Info BuiltinInfo[];
+
 public:
   ARMTargetInfo(const std::string &TripleStr)
     : TargetInfo(TripleStr), ABI("aapcs-linux"), CPU("arm1136j-s")
@@ -1393,9 +1404,8 @@ public:
   }
   virtual void getTargetBuiltins(const Builtin::Info *&Records,
                                  unsigned &NumRecords) const {
-    // FIXME: Implement.
-    Records = 0;
-    NumRecords = 0;
+    Records = BuiltinInfo;
+    NumRecords = clang::ARM::LastTSBuiltin-Builtin::FirstTSBuiltin;
   }
   virtual const char *getVAListDeclaration() const {
     return "typedef char* __builtin_va_list;";
@@ -1460,6 +1470,12 @@ void ARMTargetInfo::getGCCRegAliases(con
   Aliases = GCCRegAliases;
   NumAliases = llvm::array_lengthof(GCCRegAliases);
 }
+
+const Builtin::Info ARMTargetInfo::BuiltinInfo[] = {
+#define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS, 0, false },
+#define LIBBUILTIN(ID, TYPE, ATTRS, HEADER) { #ID, TYPE, ATTRS, HEADER, false },
+#include "clang/Basic/BuiltinsARM.def"
+};
 } // end anonymous namespace.
 
 
@@ -1892,9 +1908,10 @@ namespace {
       FloatFormat = &llvm::APFloat::IEEEsingle;
       DoubleFormat = &llvm::APFloat::IEEEsingle;
       LongDoubleFormat = &llvm::APFloat::IEEEsingle;
-      DescriptionString = "E-p:32:32:32-a0:32:32"
-                          "-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64"
-                          "-f32:32:32-f64:32:64-n32";
+      DescriptionString = "E-p:32:32:32-i1:8:8-i8:8:32-"
+                          "i16:16:32-i32:32:32-i64:32:32-"
+                          "f32:32:32-f64:64:64-v64:64:64-"
+                          "v128:128:128-a0:0:64-n32";
     }
 
     virtual void getTargetDefines(const LangOptions &Opts,

Modified: vendor/clang/dist/lib/Basic/Version.cpp
==============================================================================
--- vendor/clang/dist/lib/Basic/Version.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/Basic/Version.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -45,7 +45,7 @@ std::string getClangRevision() {
     std::string revision;
     llvm::raw_string_ostream OS(revision);
     OS << strtol(SVN_REVISION, 0, 10);
-    return revision;
+    return OS.str();
   }
 #endif
   return "";
@@ -58,7 +58,7 @@ std::string getClangFullRepositoryVersio
   const std::string &Revision = getClangRevision();
   if (!Revision.empty())
     OS << ' ' << Revision;
-  return buf;
+  return OS.str();
 }
   
 std::string getClangFullVersion() {
@@ -69,7 +69,7 @@ std::string getClangFullVersion() {
 #endif
   OS << "clang version " CLANG_VERSION_STRING " ("
      << getClangFullRepositoryVersion() << ')';
-  return buf;
+  return OS.str();
 }
 
 } // end namespace clang

Modified: vendor/clang/dist/lib/Checker/Environment.cpp
==============================================================================
--- vendor/clang/dist/lib/Checker/Environment.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/Checker/Environment.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -78,12 +78,12 @@ Environment EnvironmentManager::BindExpr
 
   if (V.isUnknown()) {
     if (Invalidate)
-      return Environment(F.Remove(Env.ExprBindings, S), Env.ACtx);
+      return Environment(F.Remove(Env.ExprBindings, S));
     else
       return Env;
   }
 
-  return Environment(F.Add(Env.ExprBindings, S, V), Env.ACtx);
+  return Environment(F.Add(Env.ExprBindings, S, V));
 }
 
 namespace {
@@ -109,12 +109,12 @@ EnvironmentManager::RemoveDeadBindings(E
                                        const GRState *ST,
                               llvm::SmallVectorImpl<const MemRegion*> &DRoots) {
 
-  CFG &C = *Env.getAnalysisContext().getCFG();
+  CFG &C = *SymReaper.getLocationContext()->getCFG();
 
   // We construct a new Environment object entirely, as this is cheaper than
   // individually removing all the subexpression bindings (which will greatly
   // outnumber block-level expression bindings).
-  Environment NewEnv = getInitialEnvironment(&Env.getAnalysisContext());
+  Environment NewEnv = getInitialEnvironment();
 
   // Iterate over the block-expr bindings.
   for (Environment::iterator I = Env.begin(), E = Env.end();

Modified: vendor/clang/dist/lib/Checker/GRExprEngine.cpp
==============================================================================
--- vendor/clang/dist/lib/Checker/GRExprEngine.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/Checker/GRExprEngine.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -477,8 +477,9 @@ void GRExprEngine::ProcessStmt(CFGElemen
 
   // Create the cleaned state.
   const ExplodedNode *BasePred = Builder->getBasePredecessor();
-  SymbolReaper SymReaper(BasePred->getLiveVariables(), SymMgr,
-                        BasePred->getLocationContext()->getCurrentStackFrame());
+
+  SymbolReaper SymReaper(BasePred->getLocationContext(), SymMgr);
+
   CleanedState = AMgr.shouldPurgeDead()
     ? StateMgr.RemoveDeadBindings(EntryNode->getState(), CurrentStmt, SymReaper)
     : EntryNode->getState();
@@ -3319,7 +3320,7 @@ struct DOTGraphTraits<ExplodedNode*> :
     Out << "\\|StateID: " << (void*) N->getState() << "\\|";
 
     const GRState *state = N->getState();
-    state->printDOT(Out);
+    state->printDOT(Out, *N->getLocationContext()->getCFG());
 
     Out << "\\l";
     return Out.str();

Modified: vendor/clang/dist/lib/Checker/GRState.cpp
==============================================================================
--- vendor/clang/dist/lib/Checker/GRState.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/Checker/GRState.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -99,7 +99,7 @@ const GRState *GRState::BindExpr(const S
 
 const GRState* GRStateManager::getInitialState(const LocationContext *InitLoc) {
   GRState State(this,
-                EnvMgr.getInitialEnvironment(InitLoc->getAnalysisContext()),
+                EnvMgr.getInitialEnvironment(),
                 StoreMgr->getInitialStore(InitLoc),
                 GDMFactory.GetEmptyMap());
 
@@ -131,14 +131,12 @@ const GRState* GRState::makeWithStore(St
 //  State pretty-printing.
 //===----------------------------------------------------------------------===//
 
-void GRState::print(llvm::raw_ostream& Out, const char* nl,
+void GRState::print(llvm::raw_ostream& Out, CFG &C, const char* nl,
                     const char* sep) const {
   // Print the store.
   GRStateManager &Mgr = getStateManager();
   Mgr.getStoreManager().print(getStore(), Out, nl, sep);
 
-  CFG &C = *getAnalysisContext().getCFG();
-
   // Print Subexpression bindings.
   bool isFirst = true;
 
@@ -186,12 +184,12 @@ void GRState::print(llvm::raw_ostream& O
   }
 }
 
-void GRState::printDOT(llvm::raw_ostream& Out) const {
-  print(Out, "\\l", "\\|");
+void GRState::printDOT(llvm::raw_ostream& Out, CFG &C) const {
+  print(Out, C, "\\l", "\\|");
 }
 
-void GRState::printStdErr() const {
-  print(llvm::errs());
+void GRState::printStdErr(CFG &C) const {
+  print(llvm::errs(), C);
 }
 
 //===----------------------------------------------------------------------===//

Modified: vendor/clang/dist/lib/Checker/SymbolManager.cpp
==============================================================================
--- vendor/clang/dist/lib/Checker/SymbolManager.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/Checker/SymbolManager.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -215,13 +215,17 @@ bool SymbolReaper::isLive(SymbolRef sym)
   return isa<SymbolRegionValue>(sym);
 }
 
+bool SymbolReaper::isLive(const Stmt* Loc, const Stmt* ExprVal) const {
+  return LCtx->getLiveVariables()->isLive(Loc, ExprVal);
+}
+
 bool SymbolReaper::isLive(const Stmt *Loc, const VarRegion *VR) const {
   const StackFrameContext *SFC = VR->getStackFrame();
 
-  if (SFC == CurrentStackFrame)
-    return Liveness.isLive(Loc, VR->getDecl());
+  if (SFC == LCtx->getCurrentStackFrame())
+    return LCtx->getLiveVariables()->isLive(Loc, VR->getDecl());
   else
-    return SFC->isParentOf(CurrentStackFrame);
+    return SFC->isParentOf(LCtx->getCurrentStackFrame());
 }
 
 SymbolVisitor::~SymbolVisitor() {}

Modified: vendor/clang/dist/lib/CodeGen/CGBlocks.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGBlocks.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CGBlocks.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -154,7 +154,7 @@ llvm::Value *CodeGenFunction::BuildBlock
 
   {
     // C = BuildBlockStructInitlist();
-    unsigned int flags = BLOCK_HAS_OBJC_TYPE;
+    unsigned int flags = BLOCK_HAS_SIGNATURE;
 
     // We run this first so that we set BlockHasCopyDispose from the entire
     // block literal.
@@ -184,6 +184,18 @@ llvm::Value *CodeGenFunction::BuildBlock
     Elts[0] = C;
 
     // __flags
+    {
+      QualType BPT = BE->getType();
+      const FunctionType *ftype = BPT->getPointeeType()->getAs<FunctionType>();
+      QualType ResultType = ftype->getResultType();
+    
+      CallArgList Args;
+      CodeGenTypes &Types = CGM.getTypes();
+      const CGFunctionInfo &FnInfo = Types.getFunctionInfo(ResultType, Args,
+                                                       CC_Default, false);
+      if (CGM.ReturnTypeUsesSret(FnInfo))
+        flags |= BLOCK_USE_STRET;
+    }
     const llvm::IntegerType *IntTy = cast<llvm::IntegerType>(
       CGM.getTypes().ConvertType(CGM.getContext().IntTy));
     C = llvm::ConstantInt::get(IntTy, flags);
@@ -200,6 +212,7 @@ llvm::Value *CodeGenFunction::BuildBlock
 
       // Optimize to being a global block.
       Elts[0] = CGM.getNSConcreteGlobalBlock();
+      
       Elts[1] = llvm::ConstantInt::get(IntTy, flags|BLOCK_IS_GLOBAL);
 
       C = llvm::ConstantStruct::get(VMContext, Elts, false);
@@ -604,7 +617,7 @@ BlockModule::GetAddrOfGlobalBlock(const 
 
   // Flags
   LiteralFields[1] =
-    llvm::ConstantInt::get(IntTy, BLOCK_IS_GLOBAL | BLOCK_HAS_OBJC_TYPE);
+    llvm::ConstantInt::get(IntTy, BLOCK_IS_GLOBAL | BLOCK_HAS_SIGNATURE);
 
   // Reserved
   LiteralFields[2] = llvm::Constant::getNullValue(IntTy);

Modified: vendor/clang/dist/lib/CodeGen/CGBlocks.h
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGBlocks.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CGBlocks.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -54,10 +54,12 @@ public:
         BLOCK_HAS_COPY_DISPOSE =  (1 << 25),
         BLOCK_HAS_CXX_OBJ =       (1 << 26),
         BLOCK_IS_GLOBAL =         (1 << 28),
-        BLOCK_HAS_OBJC_TYPE  =    (1 << 30)
+        BLOCK_USE_STRET =         (1 << 29),
+        BLOCK_HAS_SIGNATURE  =    (1 << 30)
     };
 };
 
+
 class BlockModule : public BlockBase {
   ASTContext &Context;
   llvm::Module &TheModule;

Modified: vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -387,6 +387,22 @@ RValue CodeGenFunction::EmitBuiltinExpr(
     Value *Result = getTargetHooks().encodeReturnAddress(*this, Address);
     return RValue::get(Result);
   }
+  case Builtin::BI__builtin_dwarf_sp_column: {
+    const llvm::IntegerType *Ty
+      = cast<llvm::IntegerType>(ConvertType(E->getType()));
+    int Column = getTargetHooks().getDwarfEHStackPointer(CGM);
+    if (Column == -1) {
+      CGM.ErrorUnsupported(E, "__builtin_dwarf_sp_column");
+      return RValue::get(llvm::UndefValue::get(Ty));
+    }
+    return RValue::get(llvm::ConstantInt::get(Ty, Column, true));
+  }
+  case Builtin::BI__builtin_init_dwarf_reg_size_table: {
+    Value *Address = EmitScalarExpr(E->getArg(0));
+    if (getTargetHooks().initDwarfEHRegSizeTable(*this, Address))
+      CGM.ErrorUnsupported(E, "__builtin_init_dwarf_reg_size_table");
+    return RValue::get(llvm::UndefValue::get(ConvertType(E->getType())));
+  }
   case Builtin::BI__builtin_eh_return: {
     Value *Int = EmitScalarExpr(E->getArg(0));
     Value *Ptr = EmitScalarExpr(E->getArg(1));
@@ -666,6 +682,23 @@ RValue CodeGenFunction::EmitBuiltinExpr(
     Value *F = CGM.getIntrinsic(Intrinsic::pow, &ArgType, 1);
     return RValue::get(Builder.CreateCall2(F, Base, Exponent, "tmp"));
   }
+
+  case Builtin::BI__builtin_signbit:
+  case Builtin::BI__builtin_signbitf:
+  case Builtin::BI__builtin_signbitl: {
+    LLVMContext &C = CGM.getLLVMContext();
+
+    Value *Arg = EmitScalarExpr(E->getArg(0));
+    const llvm::Type *ArgTy = Arg->getType();
+    if (ArgTy->isPPC_FP128Ty())
+      break; // FIXME: I'm not sure what the right implementation is here.
+    int ArgWidth = ArgTy->getPrimitiveSizeInBits();
+    const llvm::Type *ArgIntTy = llvm::IntegerType::get(C, ArgWidth);
+    Value *BCArg = Builder.CreateBitCast(Arg, ArgIntTy);
+    Value *ZeroCmp = llvm::Constant::getNullValue(ArgIntTy);
+    Value *Result = Builder.CreateICmpSLT(BCArg, ZeroCmp);
+    return RValue::get(Builder.CreateZExt(Result, ConvertType(E->getType())));
+  }
   }
 
   // If this is an alias for a libm function (e.g. __builtin_sin) turn it into
@@ -735,6 +768,9 @@ RValue CodeGenFunction::EmitBuiltinExpr(
 Value *CodeGenFunction::EmitTargetBuiltinExpr(unsigned BuiltinID,
                                               const CallExpr *E) {
   switch (Target.getTriple().getArch()) {
+  case llvm::Triple::arm:
+  case llvm::Triple::thumb:
+    return EmitARMBuiltinExpr(BuiltinID, E);
   case llvm::Triple::x86:
   case llvm::Triple::x86_64:
     return EmitX86BuiltinExpr(BuiltinID, E);
@@ -746,6 +782,18 @@ Value *CodeGenFunction::EmitTargetBuilti
   }
 }
 
+Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
+                                           const CallExpr *E) {
+  switch (BuiltinID) {
+  default: return 0;
+
+  case ARM::BI__builtin_thread_pointer: {
+    Value *AtomF = CGM.getIntrinsic(Intrinsic::arm_thread_pointer, 0, 0);
+    return Builder.CreateCall(AtomF);
+  }
+  }
+}
+
 Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
                                            const CallExpr *E) {
 

Modified: vendor/clang/dist/lib/CodeGen/CGCXX.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGCXX.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CGCXX.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -142,6 +142,12 @@ bool CodeGenModule::TryEmitDefinitionAsA
     return true;
   }
 
+  llvm::GlobalValue::LinkageTypes TargetLinkage
+    = getFunctionLinkage(cast<FunctionDecl>(TargetDecl.getDecl()));
+
+  if (llvm::GlobalValue::isWeakForLinker(TargetLinkage))
+    return true;
+
   // Derive the type for the alias.
   const llvm::PointerType *AliasType
     = getTypes().GetFunctionType(AliasDecl)->getPointerTo();

Modified: vendor/clang/dist/lib/CodeGen/CGExpr.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGExpr.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CGExpr.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -1062,6 +1062,16 @@ static LValue EmitFunctionDeclLValue(Cod
 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
   const NamedDecl *ND = E->getDecl();
 
+  if (ND->hasAttr<WeakRefAttr>()) {
+    const ValueDecl* VD = cast<ValueDecl>(ND);
+    llvm::Constant *Aliasee = CGM.GetWeakRefReference(VD);
+
+    Qualifiers Quals = MakeQualifiers(E->getType());
+    LValue LV = LValue::MakeAddr(Aliasee, Quals);
+
+    return LV;
+  }
+
   if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) {
     
     // Check if this is a global variable.

Modified: vendor/clang/dist/lib/CodeGen/CGExprConstant.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGExprConstant.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CGExprConstant.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -761,7 +761,9 @@ public:
       return C;
     }
     case Expr::DeclRefExprClass: {
-      NamedDecl *Decl = cast<DeclRefExpr>(E)->getDecl();
+      ValueDecl *Decl = cast<DeclRefExpr>(E)->getDecl();
+      if (Decl->hasAttr<WeakRefAttr>())
+	return CGM.GetWeakRefReference(Decl);
       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Decl))
         return CGM.GetAddrOfFunction(FD);
       if (const VarDecl* VD = dyn_cast<VarDecl>(Decl)) {

Modified: vendor/clang/dist/lib/CodeGen/CGExprScalar.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGExprScalar.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CGExprScalar.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -1888,6 +1888,8 @@ LValue CodeGenFunction::EmitObjCIsaExpr(
     V = CreateTempAlloca(ClassPtrTy, "resval");
     llvm::Value *Src = EmitScalarExpr(BaseExpr);
     Builder.CreateStore(Src, V);
+    LValue LV = LValue::MakeAddr(V, MakeQualifiers(E->getType()));
+    V = ScalarExprEmitter(*this).EmitLoadOfLValue(LV, E->getType());
   }
   else {
       if (E->isArrow())

Modified: vendor/clang/dist/lib/CodeGen/CGStmt.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGStmt.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CGStmt.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -915,18 +915,17 @@ void CodeGenFunction::EmitAsmStmt(const 
   for (unsigned i = 0, e = S.getNumOutputs(); i != e; i++) {
     TargetInfo::ConstraintInfo Info(S.getOutputConstraint(i),
                                     S.getOutputName(i));
-    assert(Target.validateOutputConstraint(Info) && 
-           "Failed to parse output constraint");
+    bool IsValid = Target.validateOutputConstraint(Info); (void)IsValid;
+    assert(IsValid && "Failed to parse output constraint"); 
     OutputConstraintInfos.push_back(Info);
   }
 
   for (unsigned i = 0, e = S.getNumInputs(); i != e; i++) {
     TargetInfo::ConstraintInfo Info(S.getInputConstraint(i),
                                     S.getInputName(i));
-    assert(Target.validateInputConstraint(OutputConstraintInfos.data(),
-                                          S.getNumOutputs(),
-                                          Info) &&
-           "Failed to parse input constraint");
+    bool IsValid = Target.validateInputConstraint(OutputConstraintInfos.data(),
+                                                  S.getNumOutputs(), Info);
+    assert(IsValid && "Failed to parse input constraint"); (void)IsValid;
     InputConstraintInfos.push_back(Info);
   }
 

Modified: vendor/clang/dist/lib/CodeGen/CodeGenFunction.h
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CodeGenFunction.h	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CodeGenFunction.h	Sat Mar  6 09:23:02 2010	(r204793)
@@ -1122,6 +1122,7 @@ public:
   /// is unhandled by the current target.
   llvm::Value *EmitTargetBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
 
+  llvm::Value *EmitARMBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
   llvm::Value *EmitX86BuiltinExpr(unsigned BuiltinID, const CallExpr *E);
   llvm::Value *EmitPPCBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
 

Modified: vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp	Sat Mar  6 09:22:29 2010	(r204792)
+++ vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp	Sat Mar  6 09:23:02 2010	(r204793)
@@ -33,6 +33,7 @@
 #include "llvm/Module.h"
 #include "llvm/Intrinsics.h"
 #include "llvm/LLVMContext.h"
+#include "llvm/ADT/Triple.h"
 #include "llvm/Target/TargetData.h"
 #include "llvm/Support/ErrorHandling.h"
 using namespace clang;
@@ -89,6 +90,10 @@ void CodeGenModule::Release() {
   EmitLLVMUsed();
 }
 
+bool CodeGenModule::isTargetDarwin() const {
+  return getContext().Target.getTriple().getOS() == llvm::Triple::Darwin;
+}
+
 /// ErrorUnsupported - Print out an error that codegen doesn't support the
 /// specified stmt yet.
 void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type,
@@ -619,9 +624,41 @@ bool CodeGenModule::MayDeferGeneration(c
   return false;
 }
 
+llvm::Constant *CodeGenModule::GetWeakRefReference(const ValueDecl *VD) {
+  const AliasAttr *AA = VD->getAttr<AliasAttr>();
+  assert(AA && "No alias?");
+
+  const llvm::Type *DeclTy = getTypes().ConvertTypeForMem(VD->getType());
+
+  // Unique the name through the identifier table.
+  const char *AliaseeName =
+    getContext().Idents.get(AA->getAliasee()).getNameStart();
+
+  // See if there is already something with the target's name in the module.
+  llvm::GlobalValue *Entry = GlobalDeclMap[AliaseeName];
+
+  llvm::Constant *Aliasee;
+  if (isa<llvm::FunctionType>(DeclTy))
+    Aliasee = GetOrCreateLLVMFunction(AliaseeName, DeclTy, GlobalDecl());
+  else
+    Aliasee = GetOrCreateLLVMGlobal(AliaseeName,
+                                    llvm::PointerType::getUnqual(DeclTy), 0);
+  if (!Entry) {
+    llvm::GlobalValue* F = cast<llvm::GlobalValue>(Aliasee);
+    F->setLinkage(llvm::Function::ExternalWeakLinkage);    
+    WeakRefReferences.insert(F);
+  }
+
+  return Aliasee;
+}
+
 void CodeGenModule::EmitGlobal(GlobalDecl GD) {
   const ValueDecl *Global = cast<ValueDecl>(GD.getDecl());
 
+  // Weak references don't produce any output by themselves.
+  if (Global->hasAttr<WeakRefAttr>())
+    return;
+
   // If this is an alias definition (which otherwise looks like a declaration)
   // emit it now.
   if (Global->hasAttr<AliasAttr>())
@@ -708,6 +745,14 @@ llvm::Constant *CodeGenModule::GetOrCrea
   // Lookup the entry, lazily creating it if necessary.
   llvm::GlobalValue *&Entry = GlobalDeclMap[MangledName];
   if (Entry) {
+    if (WeakRefReferences.count(Entry)) {
+      const FunctionDecl *FD = cast_or_null<FunctionDecl>(D.getDecl());
+      if (FD && !FD->hasAttr<WeakAttr>())
+	Entry->setLinkage(llvm::Function::ExternalLinkage);
+
+      WeakRefReferences.erase(Entry);
+    }
+
     if (Entry->getType()->getElementType() == Ty)
       return Entry;

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



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