From ad8e14b740f87d814a00f9f0d44301f71ffd7ec6 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Mon, 26 Sep 2016 22:31:19 +0200 Subject: [PATCH] opt: Don't emit inline functions from dead code Inside dead code don't regard inline functions as being referenced. --- tccgen.c | 2 +- tests/tcctest.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/tccgen.c b/tccgen.c index 056ee4e..f9d4a7c 100644 --- a/tccgen.c +++ b/tccgen.c @@ -4594,7 +4594,7 @@ ST_FUNC void unary(void) effect to generate code for it at the end of the compilation unit. Inline function as always generated in the text section. */ - if (!s->c) + if (!s->c && !nocode_wanted) put_extern_sym(s, text_section, 0, 0); r = VT_SYM | VT_CONST; } else { diff --git a/tests/tcctest.c b/tests/tcctest.c index 0485a74..7bdffff 100644 --- a/tests/tcctest.c +++ b/tests/tcctest.c @@ -1170,6 +1170,11 @@ void bool_test() extern int undefined_function(void); extern int defined_function(void); +static inline void refer_to_undefined(void) +{ + undefined_function(); +} + void optimize_out(void) { int i = 0 ? undefined_function() : defined_function(); @@ -1264,6 +1269,9 @@ void optimize_out(void) else undefined_function(); + if (defined_function() && 0) + refer_to_undefined(); + if (1) return; printf ("oor:%d\n", undefined_function());