aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorChuanqi Xu <yedeng.yd@linux.alibaba.com>2024-07-30 17:54:20 +0800
committerChuanqi Xu <yedeng.yd@linux.alibaba.com>2024-07-30 17:56:16 +0800
commitca8a4111f796fe8533e0af95557875b15becff06 (patch)
tree0dd47705a9684205e41fdc34fccb05e4df3bc2c7 /clang/lib/CodeGen/CodeGenModule.cpp
parentb1542afd0b3d393aea3a0ccab41b850f59e4033c (diff)
downloadllvm-ca8a4111f796fe8533e0af95557875b15becff06.zip
llvm-ca8a4111f796fe8533e0af95557875b15becff06.tar.gz
llvm-ca8a4111f796fe8533e0af95557875b15becff06.tar.bz2
[C++20] [Modules] Always emit the inline builtins
See the attached test for the motivation example. If we're too greedy to not emit the definition for inline builtins, we may meet a middle end crash. And it should be good to emit inline builtins always.
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 63ed5b4..8057812 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -4022,6 +4022,11 @@ bool CodeGenModule::shouldEmitFunction(GlobalDecl GD) {
return true;
const auto *F = cast<FunctionDecl>(GD.getDecl());
+ // Inline builtins declaration must be emitted. They often are fortified
+ // functions.
+ if (F->isInlineBuiltinDeclaration())
+ return true;
+
if (CodeGenOpts.OptimizationLevel == 0 && !F->hasAttr<AlwaysInlineAttr>())
return false;
@@ -4067,11 +4072,6 @@ bool CodeGenModule::shouldEmitFunction(GlobalDecl GD) {
}
}
- // Inline builtins declaration must be emitted. They often are fortified
- // functions.
- if (F->isInlineBuiltinDeclaration())
- return true;
-
// PR9614. Avoid cases where the source code is lying to us. An available
// externally function should have an equivalent function somewhere else,
// but a function that calls itself through asm label/`__builtin_` trickery is