diff options
author | Brian Gaeke <gaeke@uiuc.edu> | 2003-12-12 15:38:06 +0000 |
---|---|---|
committer | Brian Gaeke <gaeke@uiuc.edu> | 2003-12-12 15:38:06 +0000 |
commit | 13a2e54e0c51ba92c0b4fd7d60188e0a8de10c2d (patch) | |
tree | 0a1f4461517f3c6d064ca17bb423ce21724e8e1d /llvm/lib/ExecutionEngine/Interpreter | |
parent | 542d24f5309c4cb10069b33be5c9576a5e3e5b93 (diff) | |
download | bcm5719-llvm-13a2e54e0c51ba92c0b4fd7d60188e0a8de10c2d.tar.gz bcm5719-llvm-13a2e54e0c51ba92c0b4fd7d60188e0a8de10c2d.zip |
Dynamically get the right-sized member of a GenericValue to hold a size_t, and
use it to return the result of strlen.
llvm-svn: 10433
Diffstat (limited to 'llvm/lib/ExecutionEngine/Interpreter')
-rw-r--r-- | llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp index b547e5231f8..2b9cda4a6a4 100644 --- a/llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp +++ b/llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp @@ -481,11 +481,17 @@ GenericValue lle_X_strcpy(FunctionType *M, const vector<GenericValue> &Args) { return PTOGV(strcpy((char*)GVTOP(Args[0]), (char*)GVTOP(Args[1]))); } -// long strlen(const char *src); +// size_t strlen(const char *src); GenericValue lle_X_strlen(FunctionType *M, const vector<GenericValue> &Args) { assert(Args.size() == 1); + size_t strlenResult = strlen ((char *) GVTOP (Args[0])); GenericValue Ret; - Ret.LongVal = strlen((char*)GVTOP(Args[0])); + if (sizeof (size_t) == sizeof (uint64_t)) { + Ret.ULongVal = strlenResult; + } else { + assert (sizeof (size_t) == sizeof (unsigned int)); + Ret.UIntVal = strlenResult; + } return Ret; } |