[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