diff options
author | David Blaikie <dblaikie@gmail.com> | 2017-11-02 22:28:50 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2017-11-02 22:28:50 +0000 |
commit | 1524e67feb5ad7fe9d6b42392929c1c6771cffab (patch) | |
tree | 6971f79755cf55a48ff3bf6ea94db84509de82ee /clang/lib/Serialization | |
parent | dce9def3dd56e71bceda335cb142e80084a82867 (diff) | |
download | bcm5719-llvm-1524e67feb5ad7fe9d6b42392929c1c6771cffab.tar.gz bcm5719-llvm-1524e67feb5ad7fe9d6b42392929c1c6771cffab.zip |
Modular Codegen: Don't home always_inline functions
Since they'll likely (not always - if the address is taken, etc) be
inlined away, even at -O0, separately provided weak definitions are
likely to be unused so skip all of that.
llvm-svn: 317279
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTWriterDecl.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index bf34d01751c..e9408060947 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -2270,9 +2270,11 @@ void ASTRecordWriter::AddFunctionDefinition(const FunctionDecl *FD) { if (Writer->Context->getLangOpts().ModulesCodegen) { // Under -fmodules-codegen, codegen is performed for all non-internal, // non-always_inline functions. - if (!Linkage) - Linkage = Writer->Context->GetGVALinkageForFunction(FD); - ModulesCodegen = *Linkage != GVA_Internal; + if (!FD->hasAttr<AlwaysInlineAttr>()) { + if (!Linkage) + Linkage = Writer->Context->GetGVALinkageForFunction(FD); + ModulesCodegen = *Linkage != GVA_Internal; + } } } Record->push_back(ModulesCodegen); |