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;


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to