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...
Roman Divacky
rdivacky at FreeBSD.org
Sat Mar 6 09:23:03 UTC 2010
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 ***
More information about the svn-src-all
mailing list