Skip to contentSkip to conversation

GCC4 warning: no return statement in function returning

KJ Domen Puncer 4 participants 6 messages Jul 1, 2005 – Jul 8, 2005 Kernel janitors

lore
Share & tools
lore
#0 lore raw
Quoted 10 lines · Jesse Millan

The function kauditd_thread() does not return an integer as the declaration says it should. There is no return statement in the body whatsoever and looks like the function should have been declared as returning void.
---

Can you put Signed-off-by at end of description, I don't think I've seen it elsewhere often. And please try to make Subjects that are different for every patch.

kernel/audit.c static int audit_set_failure(int state, · line 278

Quoted 11 lines

diff -puN kernel/audit.c~audit-patch kernel/audit.c

kernel/audit.c renamed from kernel/audit.c~audit-patch +1 -1
@@ -275,7 +275,7 @@ static int audit_set_failure(int state, 
 	return old;
 }
 
-int kauditd_thread(void *dummy)
+void kauditd_thread(void *dummy)

This should warn too, as kthread_create() (kthread_run()) accepts int (*threadfn)(void *data)

I think kauditd_thread() should be fixed here to return something... "The return value should be zero or a negative error number:
it will be passed to kthread_stop()."

Quoted 9 lines
kernel/audit.c renamed from kernel/audit.c~audit-patch +0 -0
 {
 	struct sk_buff *skb;
 

_

_______________________________________________
Kernel-janitors mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/kernel-janitors

_______________________________________________
Kernel-janitors mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/kernel-janitors

#1 lore raw
Quoted 10 lines · Domen Puncer

Review

Quoted 2 lines · Jesse Millan
(quoted diff) +1 -1
-int kauditd_thread(void *dummy)
+void kauditd_thread(void *dummy)

This should warn too, as kthread_create() (kthread_run()) accepts int (*threadfn)(void *data)

I think kauditd_thread() should be fixed here to return something... "The return value should be zero or a negative error number:
it will be passed to kthread_stop()."

But it doesn't return at all (d'oh, should have seen this before). Still... there's a warning if it returns void, right?

Domen

_______________________________________________
Kernel-janitors mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/kernel-janitors

#2 lore raw

Re: [KJ] Re: GCC4 warning: no return statement in function

In reply to Domen Puncer

On Sat, 2 Jul 2005 00:22:51 +0200 Domen Puncer wrote:

| On 02/07/05 00:15 +0200, Domen Puncer wrote:
| > On 01/07/05 11:19 -0700, Jesse Millan wrote:
| > > -int kauditd_thread(void *dummy)
| > > +void kauditd_thread(void *dummy)
| > 
| > This should warn too, as kthread_create() (kthread_run()) accepts
| > int (*threadfn)(void *data)
| > 
| > I think kauditd_thread() should be fixed here to return something...
| > "The return value should be zero or a negative error number:
| >  it will be passed to kthread_stop()."
| 
| But it doesn't return at all (d'oh, should have seen this before).
| Still... there's a warning if it returns void, right?

so it needs
__attribute__((noreturn))
added to the function?
(or ATTRIB_NORET)

---
~Randy

_______________________________________________
Kernel-janitors mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/kernel-janitors

#3 lore raw
In reply to Domen Puncer
Quoted 15 lines · Domen Puncer
Quoted 11 lines · Domen Puncer

Review

Quoted 2 lines · Jesse Millan
(quoted diff) +1 -1
-int kauditd_thread(void *dummy)
+void kauditd_thread(void *dummy)

This should warn too, as kthread_create() (kthread_run()) accepts int (*threadfn)(void *data)

I think kauditd_thread() should be fixed here to return something... "The return value should be zero or a negative error number:
it will be passed to kthread_stop()."

Quoted 6 lines

But it doesn't return at all (d'oh, should have seen this before). Still... there's a warning if it returns void, right?

Domen

Yes, missed that. Chaning the return type removes one warning and adds another:

kernel/audit.c:386: warning: passing argument 1 of 'kthread_create' from incompatible pointer type

Signature · 12 lines
Jesse Millan
CNS Unix Team
Portland State University
Phone: (503) 725-9151
Mobile: (503) 453-0748
GPG key: www.system-calls.com/gpg.php

grep --recursive --ignore-case 'SHOULD WORK' /usr/src/linux/* | wc
_______________________________________________
Kernel-janitors mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/kernel-janitors
#4 lore raw
In reply to Domen Puncer
Quoted 17 lines · randy_dunlap

On Sat, 2 Jul 2005 00:22:51 +0200 Domen Puncer wrote:

| On 02/07/05 00:15 +0200, Domen Puncer wrote:
| > On 01/07/05 11:19 -0700, Jesse Millan wrote:
| > > -int kauditd_thread(void *dummy)
| > > +void kauditd_thread(void *dummy)
| > 
| > This should warn too, as kthread_create() (kthread_run()) accepts
| > int (*threadfn)(void *data)
| > 
| > I think kauditd_thread() should be fixed here to return something...
| > "The return value should be zero or a negative error number:
| >  it will be passed to kthread_stop()."
| 
| But it doesn't return at all (d'oh, should have seen this before).
| Still... there's a warning if it returns void, right?
Quoted 8 lines

so it needs
__attribute__((noreturn))
added to the function?
(or ATTRIB_NORET)

---
~Randy

Using the noreturn attribute implies to me that the return type should be void. That can't be because kthread_run() expects a pointer to a function that returns an int. Any return statement after the while(1) is unreacable as Domen pointed out...

Could you clarify what needs to be done?

Signature · 12 lines
Jesse Millan
CNS Unix Team
Portland State University
Phone: (503) 725-9151
Mobile: (503) 453-0748
GPG key: www.system-calls.com/gpg.php

grep --recursive --ignore-case 'SHOULD WORK' /usr/src/linux/* | wc
_______________________________________________
Kernel-janitors mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/kernel-janitors
#5 lore raw

Re: [KJ] Re: GCC4 warning: no return statement in function

In reply to Domen Puncer

On Thu, 07 Jul 2005 14:14:13 -0700 Jesse Millan wrote:

| randy_dunlap wrote:
| > On Sat, 2 Jul 2005 00:22:51 +0200 Domen Puncer wrote:
| > 
| > | On 02/07/05 00:15 +0200, Domen Puncer wrote:
| > | > On 01/07/05 11:19 -0700, Jesse Millan wrote:
| > | > > -int kauditd_thread(void *dummy)
| > | > > +void kauditd_thread(void *dummy)
| > | > 
| > | > This should warn too, as kthread_create() (kthread_run()) accepts
| > | > int (*threadfn)(void *data)
| > | > 
| > | > I think kauditd_thread() should be fixed here to return something...
| > | > "The return value should be zero or a negative error number:
| > | >  it will be passed to kthread_stop()."
| > | 
| > | But it doesn't return at all (d'oh, should have seen this before).
| > | Still... there's a warning if it returns void, right?
| > 
| > so it needs 
| >   __attribute__((noreturn))
| > added to the function?
| > (or ATTRIB_NORET)
| > 
| > ---
| > ~Randy
| > 
| 
| Using the noreturn attribute implies to me that the return type should
| be void. That can't be because kthread_run() expects a pointer to a
| function that returns an int. Any return statement after the while(1) is
| unreacable as Domen pointed out...
| 
| Could you clarify what needs to be done?

Not really. and your summary above is correct, including that the return type for noreturn should be void. (see GCC 4.0.1 manual:

http://gcc.gnu.org/onlinedocs/gcc-4.0.1/gcc/Function-Attributes.html#Function-Attributes

"It does not make sense for a noreturn function to have a return type other than void."

I suppose you could try asking on the
[email protected] mailing list.

---
~Randy

_______________________________________________
Kernel-janitors mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/kernel-janitors