[clang] bd37991 - Refine the constraint for isInlineBuiltinDeclaration
via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 28 07:07:43 PDT 2021
Author: serge-sans-paille
Date: 2021-09-28T16:07:33+02:00
New Revision: bd379915de38a9af3d65e19075a6a64ebbb8d6db
URL: https://github.com/llvm/llvm-project/commit/bd379915de38a9af3d65e19075a6a64ebbb8d6db
DIFF: https://github.com/llvm/llvm-project/commit/bd379915de38a9af3d65e19075a6a64ebbb8d6db.diff
LOG: Refine the constraint for isInlineBuiltinDeclaration
Require it to be always_inline, to more closely match how _FORITFY_SOURCE
behaves.
This avoids generation of `.inline` suffixed functions - these should always be
inlined.
Added:
Modified:
clang/lib/AST/Decl.cpp
clang/test/CodeGen/memcpy-nobuiltin.inc
Removed:
################################################################################
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index 835e28c0bc9f..60ca8633224b 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -3176,7 +3176,8 @@ bool FunctionDecl::isInlineBuiltinDeclaration() const {
return false;
const FunctionDecl *Definition;
- return hasBody(Definition) && Definition->isInlineSpecified();
+ return hasBody(Definition) && Definition->isInlineSpecified() &&
+ Definition->hasAttr<AlwaysInlineAttr>();
}
bool FunctionDecl::isDestroyingOperatorDelete() const {
diff --git a/clang/test/CodeGen/memcpy-nobuiltin.inc b/clang/test/CodeGen/memcpy-nobuiltin.inc
index 25eab0a9ffd0..d1d034c12899 100644
--- a/clang/test/CodeGen/memcpy-nobuiltin.inc
+++ b/clang/test/CodeGen/memcpy-nobuiltin.inc
@@ -2,7 +2,7 @@
extern void *memcpy(void *dest, void const *from, size_t n);
#ifdef WITH_DECL
-inline void *memcpy(void *dest, void const *from, size_t n) {
+inline __attribute__((always_inline)) void *memcpy(void *dest, void const *from, size_t n) {
char const *ifrom = from;
char *idest = dest;
while (n--)
@@ -11,7 +11,7 @@ inline void *memcpy(void *dest, void const *from, size_t n) {
}
#endif
#ifdef WITH_SELF_REFERENCE_DECL
-inline void *memcpy(void *dest, void const *from, size_t n) {
+inline __attribute__((always_inline)) void *memcpy(void *dest, void const *from, size_t n) {
if (n != 0)
memcpy(dest, from, n);
return dest;
More information about the cfe-commits
mailing list