djtodoro added a comment. In D108618#2964265 <https://reviews.llvm.org/D108618#2964265>, @rjmccall wrote:
> Why do you want to add `noinline` to a function declaration that lacks a > definition? If this won't be used at all I guess the compiler should throw a warning at least. One example comes to my mind, and it includes LTO (and cross-compile unit inlining). $ cat test-1.c extern int __attribute__((noinline)) bar(void); int foo() { int v1 = bar(); if (v1 > 100) return 0; v1--; return v1; } $ cat $ cat test-2.c int __attribute__((always_inline)) bar(void); int foo2() { int v2 = bar(); if (v2 > 1000) return 0; v2++; return v2; } $ cat test.c #include <stdio.h> extern int foo(); extern int foo2(); int bar() { int x; scanf("%d", &x); ++x; return x; } int main() { int i = foo(); int j = foo2(); return i - j; } $ clang test.c -g -S -flto -emit-llvm $ clang test-1.c -g -S -flto -emit-llvm $ clang test-2.c -g -S -flto -emit-llvm $ llvm-link -S -o linked.ll test-1.ll test-2.ll test.ll $ opt -S -O1 linked.ll -o optimized.ll Having these simple compile units, I can expect that compiler is able to inline the `bar()` into `foo2()` but not into `foo()`. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D108618/new/ https://reviews.llvm.org/D108618 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits