diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2009-02-20 06:36:40 +0000 | 
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2009-02-20 06:36:40 +0000 | 
| commit | e4be42c17fe1126664997032a149b574c6df7219 (patch) | |
| tree | 24a3f4cc366f9343374204803726675881f5c517 | |
| parent | 90669d050097a4ecada92f160d58207957835e0d (diff) | |
| download | bcm5719-llvm-e4be42c17fe1126664997032a149b574c6df7219.tar.gz bcm5719-llvm-e4be42c17fe1126664997032a149b574c6df7219.zip  | |
Add some stdlib builtins
llvm-svn: 65115
| -rw-r--r-- | clang/include/clang/AST/Builtins.def | 6 | ||||
| -rw-r--r-- | clang/test/CodeGen/builtins.c | 10 | 
2 files changed, 15 insertions, 1 deletions
diff --git a/clang/include/clang/AST/Builtins.def b/clang/include/clang/AST/Builtins.def index 94696e8174f..ce116586678 100644 --- a/clang/include/clang/AST/Builtins.def +++ b/clang/include/clang/AST/Builtins.def @@ -138,6 +138,12 @@ BUILTIN(__builtin_bzero, "vv*z", "n")  BUILTIN(__builtin_memcpy, "v*v*vC*z", "n")  BUILTIN(__builtin_memmove, "v*v*vC*z", "n")  BUILTIN(__builtin_memset, "v*v*iz", "n") +BUILTIN(__builtin_strcat, "c*c*cC*", "nF") +BUILTIN(__builtin_strncat, "c*c*cC*z", "nF") +BUILTIN(__builtin_strcpy, "c*c*cC*", "nF") +BUILTIN(__builtin_strncpy, "c*c*cC*z", "nF") +BUILTIN(__builtin_strchr, "c*cC*i", "nF") +BUILTIN(__builtin_strrchr, "c*cC*i", "nF")  BUILTIN(__builtin_return_address, "v*Ui", "n")  BUILTIN(__builtin_frame_address, "v*Ui", "n")  BUILTIN(__builtin_flt_rounds, "i", "nc") diff --git a/clang/test/CodeGen/builtins.c b/clang/test/CodeGen/builtins.c index e7055d9ad8a..07f3db9465f 100644 --- a/clang/test/CodeGen/builtins.c +++ b/clang/test/CodeGen/builtins.c @@ -77,9 +77,17 @@ int main() {    Q(powif, (1.2f, N));    Q(powil, (1.2f, N)); -  // Object size checking +  // Lib functions    int a, b, n = random(); // Avoid optimizing out.    char s0[10], s1[] = "Hello"; +  V(strcat, (s0, s1)); +  V(strncat, (s0, s1, n)); +  V(strchr, (s0, s1[0])); +  V(strrchr, (s0, s1[0])); +  V(strcpy, (s0, s1)); +  V(strncpy, (s0, s1, n)); +   +  // Object size checking    V(__memset_chk, (s0, 0, sizeof s0, n));    V(__memcpy_chk, (s0, s1, sizeof s0, n));    V(__memmove_chk, (s0, s1, sizeof s0, n));  | 

