diff options
| -rw-r--r-- | AGENTS/PITFALLS.md | 4 | ||||
| -rw-r--r-- | lib/CodeGen/StringConversionHandler.cc | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/AGENTS/PITFALLS.md b/AGENTS/PITFALLS.md index 6d1b196..fd53883 100644 --- a/AGENTS/PITFALLS.md +++ b/AGENTS/PITFALLS.md @@ -29,8 +29,8 @@ test programs. must be a variable"; annotate `BYVAL` explicitly. - **`/` always yields REAL** (double FDiv), even for two INTEGERs; integer division is DIV/MOD only. CHR returns a STRING (2-byte heap buffer), not CHAR. STR_TO_NUM always - returns REAL. NUM_TO_STR formats i64 with sprintf `"%d"` — corrupts values over 32 - bits. + returns REAL. NUM_TO_STR formats INTEGER with sprintf `"%lld"` (the full signed + i64 range) and REAL with `"%f"`. - **`getExprTypeInfo` returns nullptr** for expressions it can't classify (null-check it at any new call site) and internally defaults to INTEGER for arithmetic binaries and unknown-function calls; OUTPUT reports an error for a nullptr result. diff --git a/lib/CodeGen/StringConversionHandler.cc b/lib/CodeGen/StringConversionHandler.cc index 62b99d7..af7f385 100644 --- a/lib/CodeGen/StringConversionHandler.cc +++ b/lib/CodeGen/StringConversionHandler.cc @@ -30,7 +30,7 @@ Value *StringConversionHandler::emitNumToStr(Value *Num, bool IsReal) { if (IsReal) { FormatStr = Builder.CreateGlobalStringPtr("%f"); } else { - FormatStr = Builder.CreateGlobalStringPtr("%d"); + FormatStr = Builder.CreateGlobalStringPtr("%lld"); } Builder.CreateCall(SprintfFunc, {Buffer, FormatStr, Num}); |
