diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/Driver/clang.cpp | 2 | ||||
-rw-r--r-- | clang/test/CodeGen/PR3589-freestanding-libcalls.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/clang/Driver/clang.cpp b/clang/Driver/clang.cpp index 2f7ce69ee39..d1ef871d6a1 100644 --- a/clang/Driver/clang.cpp +++ b/clang/Driver/clang.cpp @@ -1271,7 +1271,7 @@ static void InitializeCompileOptions(CompileOptions &Opts) { // FIXME: There are llvm-gcc options to control these selectively. Opts.InlineFunctions = (Opts.OptimizationLevel > 1); Opts.UnrollLoops = (Opts.OptimizationLevel > 1 && !OptSize); - Opts.SimplifyLibCalls = 1; + Opts.SimplifyLibCalls = !Freestanding; #ifdef NDEBUG Opts.VerifyModule = 0; diff --git a/clang/test/CodeGen/PR3589-freestanding-libcalls.c b/clang/test/CodeGen/PR3589-freestanding-libcalls.c new file mode 100644 index 00000000000..61852e3c49b --- /dev/null +++ b/clang/test/CodeGen/PR3589-freestanding-libcalls.c @@ -0,0 +1,9 @@ +// RUN: clang -emit-llvm %s -o - | grep 'declare i32 @printf' | count 1 && +// RUN: clang -O2 -emit-llvm %s -o - | grep 'declare i32 @puts' | count 1 && +// RUN: clang -ffreestanding -O2 -emit-llvm %s -o - | grep 'declare i32 @puts' | count 0 + +#include <stdio.h> + +void f0() { + printf("hello\n"); +} |