diff options
author | Chuanqi Xu <yedeng.yd@linux.alibaba.com> | 2024-07-30 17:54:20 +0800 |
---|---|---|
committer | Chuanqi Xu <yedeng.yd@linux.alibaba.com> | 2024-07-30 17:56:16 +0800 |
commit | ca8a4111f796fe8533e0af95557875b15becff06 (patch) | |
tree | 0dd47705a9684205e41fdc34fccb05e4df3bc2c7 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | b1542afd0b3d393aea3a0ccab41b850f59e4033c (diff) | |
download | llvm-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.cpp | 10 |
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 |