Skip to content

Commit bd37991

Browse files
author
serge-sans-paille
committed
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.
1 parent 1f8bead commit bd37991

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

clang/lib/AST/Decl.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3176,7 +3176,8 @@ bool FunctionDecl::isInlineBuiltinDeclaration() const {
31763176
return false;
31773177

31783178
const FunctionDecl *Definition;
3179-
return hasBody(Definition) && Definition->isInlineSpecified();
3179+
return hasBody(Definition) && Definition->isInlineSpecified() &&
3180+
Definition->hasAttr<AlwaysInlineAttr>();
31803181
}
31813182

31823183
bool FunctionDecl::isDestroyingOperatorDelete() const {

clang/test/CodeGen/memcpy-nobuiltin.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
extern void *memcpy(void *dest, void const *from, size_t n);
33

44
#ifdef WITH_DECL
5-
inline void *memcpy(void *dest, void const *from, size_t n) {
5+
inline __attribute__((always_inline)) void *memcpy(void *dest, void const *from, size_t n) {
66
char const *ifrom = from;
77
char *idest = dest;
88
while (n--)
@@ -11,7 +11,7 @@ inline void *memcpy(void *dest, void const *from, size_t n) {
1111
}
1212
#endif
1313
#ifdef WITH_SELF_REFERENCE_DECL
14-
inline void *memcpy(void *dest, void const *from, size_t n) {
14+
inline __attribute__((always_inline)) void *memcpy(void *dest, void const *from, size_t n) {
1515
if (n != 0)
1616
memcpy(dest, from, n);
1717
return dest;

0 commit comments

Comments
 (0)