summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/tools/clang
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2013-06-15 12:13:22 +0000
committerandrew <andrew@FreeBSD.org>2013-06-15 12:13:22 +0000
commit739fcd601deec1874f0a7cdf88ec53f4a3fa337d (patch)
tree3cd5d0a8602c7a07f2ecb2559a99b73222b196cb /contrib/llvm/tools/clang
parent50e34d3bd7ccbd50c94001412753c821f003afe6 (diff)
downloadFreeBSD-src-739fcd601deec1874f0a7cdf88ec53f4a3fa337d.zip
FreeBSD-src-739fcd601deec1874f0a7cdf88ec53f4a3fa337d.tar.gz
Pull in r183926 from LLVM trunk:
Allow clang to build __clear_cache on ARM. __clear_cache is special. It needs no signature, but is a real function in compiler_rt or libgcc. Patch by Andrew Turner. This allows us to build the __clear_cache function in compiler-rt.
Diffstat (limited to 'contrib/llvm/tools/clang')
-rw-r--r--contrib/llvm/tools/clang/include/clang/Basic/Builtins.def2
-rw-r--r--contrib/llvm/tools/clang/include/clang/Basic/Builtins.h7
-rw-r--r--contrib/llvm/tools/clang/include/clang/Basic/BuiltinsAArch64.def2
-rw-r--r--contrib/llvm/tools/clang/include/clang/Basic/BuiltinsARM.def2
-rw-r--r--contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp3
5 files changed, 13 insertions, 3 deletions
diff --git a/contrib/llvm/tools/clang/include/clang/Basic/Builtins.def b/contrib/llvm/tools/clang/include/clang/Basic/Builtins.def
index 0a513ef..48bf5db 100644
--- a/contrib/llvm/tools/clang/include/clang/Basic/Builtins.def
+++ b/contrib/llvm/tools/clang/include/clang/Basic/Builtins.def
@@ -70,6 +70,8 @@
// f -> this is a libc/libm function without the '__builtin_' prefix. It can
// be followed by ':headername:' to state which header this function
// comes from.
+// i -> this is a runtime library implemented function without the
+// '__builtin_' prefix. It will be implemented in compiter-rt or libgcc.
// p:N: -> this is a printf-like function whose Nth argument is the format
// string.
// P:N: -> similar to the p:N: attribute, but the function is like vprintf
diff --git a/contrib/llvm/tools/clang/include/clang/Basic/Builtins.h b/contrib/llvm/tools/clang/include/clang/Basic/Builtins.h
index 3b88e15..cfcbcdb 100644
--- a/contrib/llvm/tools/clang/include/clang/Basic/Builtins.h
+++ b/contrib/llvm/tools/clang/include/clang/Basic/Builtins.h
@@ -128,6 +128,13 @@ public:
return strchr(GetRecord(ID).Attributes, 'f') != 0;
}
+ /// \brief Determines whether this builtin is a predefined compiler-rt/libgcc
+ /// function, such as "__clear_cache", where we know the signature a
+ /// priori.
+ bool isPredefinedRuntimeFunction(unsigned ID) const {
+ return strchr(GetRecord(ID).Attributes, 'i') != 0;
+ }
+
/// \brief Determines whether this builtin has custom typechecking.
bool hasCustomTypechecking(unsigned ID) const {
return strchr(GetRecord(ID).Attributes, 't') != 0;
diff --git a/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsAArch64.def b/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsAArch64.def
index 9e9f6d08..768e4bb 100644
--- a/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsAArch64.def
+++ b/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsAArch64.def
@@ -15,4 +15,4 @@
// The format of this database matches clang/Basic/Builtins.def.
// In libgcc
-BUILTIN(__clear_cache, "vv*v*", "")
+BUILTIN(__clear_cache, "vv*v*", "i")
diff --git a/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsARM.def b/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsARM.def
index 888e529..f1e3dfc 100644
--- a/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsARM.def
+++ b/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsARM.def
@@ -15,7 +15,7 @@
// The format of this database matches clang/Basic/Builtins.def.
// In libgcc
-BUILTIN(__clear_cache, "v.", "")
+BUILTIN(__clear_cache, "v.", "i")
BUILTIN(__builtin_thread_pointer, "v*", "")
// Saturating arithmetic
diff --git a/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp b/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
index e0e8bd6..f72bec0 100644
--- a/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
+++ b/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
@@ -8671,7 +8671,8 @@ Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D) {
// Builtin functions cannot be defined.
if (unsigned BuiltinID = FD->getBuiltinID()) {
- if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {
+ if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID) &&
+ !Context.BuiltinInfo.isPredefinedRuntimeFunction(BuiltinID)) {
Diag(FD->getLocation(), diag::err_builtin_definition) << FD;
FD->setInvalidDecl();
}
OpenPOWER on IntegriCloud