public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-8463] c/c++: Tweak warning for 'always_inline function might not be inlinable'
@ 2024-01-26 23:55 Hans-Peter Nilsson
  0 siblings, 0 replies; only message in thread
From: Hans-Peter Nilsson @ 2024-01-26 23:55 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:4eb836704239de22078caafe5ce261c5378e73da

commit r14-8463-g4eb836704239de22078caafe5ce261c5378e73da
Author: Hans-Peter Nilsson <hp@axis.com>
Date:   Sat Jan 27 00:55:01 2024 +0100

    c/c++: Tweak warning for 'always_inline function might not be inlinable'
    
    When you're not regularly exposed to this warning, it is
    easy to be misled by its wording, believing that there's
    something else in the function that stops it from being
    inlined, something other than the lack of also being
    *declared* inline.  Also, clang does not warn.
    
    It's just a warning: without the inline directive, there has
    to be a secondary reason for the function to be inlined,
    other than the always_inline attribute, a reason that may be
    in effect despite the warning.
    
    Whenever the text is quoted in inline-related bugzilla
    entries, there seems to often have been an initial step of
    confusion that has to be cleared, for example in PR55830.
    A file in the powerpc-specific parts of the test-suite,
    gcc.target/powerpc/vec-extract-v16qiu-v2.h, has a comment
    and seems to be another example, and I testify as the
    first-hand third "experience".  The wording has been the
    same since the warning was added.
    
    Let's just tweak the wording, adding the cause, so that the
    reason for the warning is clearer.  This hopefully stops the
    user from immediately asking "'Might'?  Because why?"  and
    then going off looking at the function body - or grepping
    the gcc source or documentation, or enter a bug-report
    subsequently closed as resolved/invalid.
    
    Since the message is only appended with additional
    information, no test-case actually required adjustment.
    I still changed them, so the message is covered.
    
    gcc:
            * cgraphunit.cc (process_function_and_variable_attributes): Tweak
            the warning for an attribute-always_inline without inline declaration.
    
    gcc/testsuite:
            * g++.dg/Wattributes-3.C: Adjust expected warning.
            * gcc.dg/fail_always_inline.c: Ditto.

Diff:
---
 gcc/cgraphunit.cc                         | 3 ++-
 gcc/testsuite/g++.dg/Wattributes-3.C      | 4 ++--
 gcc/testsuite/gcc.dg/fail_always_inline.c | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/gcc/cgraphunit.cc b/gcc/cgraphunit.cc
index 38052674aaa5..5c405258ec30 100644
--- a/gcc/cgraphunit.cc
+++ b/gcc/cgraphunit.cc
@@ -918,7 +918,8 @@ process_function_and_variable_attributes (cgraph_node *first,
 	  /* redefining extern inline function makes it DECL_UNINLINABLE.  */
 	  && !DECL_UNINLINABLE (decl))
 	warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wattributes,
-		    "%<always_inline%> function might not be inlinable");
+		    "%<always_inline%> function might not be inlinable"
+		    " unless also declared %<inline%>");
 
       process_common_attributes (node, decl);
     }
diff --git a/gcc/testsuite/g++.dg/Wattributes-3.C b/gcc/testsuite/g++.dg/Wattributes-3.C
index 208ec6696551..dd9c2244900c 100644
--- a/gcc/testsuite/g++.dg/Wattributes-3.C
+++ b/gcc/testsuite/g++.dg/Wattributes-3.C
@@ -26,7 +26,7 @@ B::operator char () const { return 0; }
 
 ATTR ((__noinline__))
 B::operator int () const      // { dg-warning "ignoring attribute .noinline. because it conflicts with attribute .always_inline." }
-// { dg-warning "function might not be inlinable" "" { target *-*-* } .-1 }
+// { dg-warning "function might not be inlinable unless also declared .inline." "" { target *-*-* } .-1 }
 
 {
   return 0;
@@ -45,7 +45,7 @@ C::operator char () { return 0; }
 
 ATTR ((__noinline__))
 C::operator short ()           // { dg-warning "ignoring attribute .noinline. because it conflicts with attribute .always_inline." }
-// { dg-warning "function might not be inlinable" "" { target *-*-* } .-1 }
+// { dg-warning "function might not be inlinable unless also declared .inline." "" { target *-*-* } .-1 }
 { return 0; }
 
 inline ATTR ((__noinline__))
diff --git a/gcc/testsuite/gcc.dg/fail_always_inline.c b/gcc/testsuite/gcc.dg/fail_always_inline.c
index 86645b850de8..16a549ca0935 100644
--- a/gcc/testsuite/gcc.dg/fail_always_inline.c
+++ b/gcc/testsuite/gcc.dg/fail_always_inline.c
@@ -2,7 +2,7 @@
 /* { dg-add-options bind_pic_locally } */
 
 extern __attribute__ ((always_inline)) void
- bar() { } /* { dg-warning "function might not be inlinable" } */
+ bar() { } /* { dg-warning "function might not be inlinable unless also declared .inline." } */
 
 void
 f()

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-01-26 23:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-26 23:55 [gcc r14-8463] c/c++: Tweak warning for 'always_inline function might not be inlinable' Hans-Peter Nilsson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).