public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Mark deprecated functions so they give a warning on use
@ 2002-12-28  0:57 Rusty Russell
  2002-12-28  5:54 ` Richard Henderson
  2002-12-28 15:30 ` Alexander Kellett
  0 siblings, 2 replies; 7+ messages in thread
From: Rusty Russell @ 2002-12-28  0:57 UTC (permalink / raw)
  To: torvalds; +Cc: linux-kernel, william stinson, trivial

If anyone can think of a better way, please share.  This should speed
up the removal of functions like check_region() (which, despite
William's janitorial efforts, is still not at the stage where it can
be removed).

Thanks,
Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

Name: Mark deprecated functions so they give a warning on use
Author: Rusty Russell
Status: Trivial

D: Should speed elimination of deprecated functions (eg. check_region,
D: deprecated since 2.3, still used in about 120 files).
D:
D: This patch causes an "unused label" warning: hopefully unusual
D: enough to make people look twice. eg:
D:  drivers/net/depca.c: In function `isa_probe':
D:  drivers/net/depca.c:1413: warning: label `DEPRECATED_use_request_region_return_value' defined but not used

diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.53/include/linux/compiler.h working-2.5.53-deprecated/include/linux/compiler.h
--- linux-2.5.53/include/linux/compiler.h	2002-12-28 11:12:34.000000000 +1100
+++ working-2.5.53-deprecated/include/linux/compiler.h	2002-12-28 11:51:08.000000000 +1100
@@ -19,4 +19,10 @@
   ({ unsigned long __ptr;					\
     __asm__ ("" : "=g"(__ptr) : "0"(ptr));		\
     (typeof(ptr)) (__ptr + (off)); })
+
+/* Used to give a warning on use of deprecated functions.  eg:
+   #define some_old_function(arg) \
+	__DEPRECATED(use_newfunction_instead), __some_old_function(arg)
+*/
+#define __DEPRECATED(msg) ({DEPRECATED_##msg: 1; })
 #endif /* __LINUX_COMPILER_H */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.53/include/linux/ioport.h working-2.5.53-deprecated/include/linux/ioport.h
--- linux-2.5.53/include/linux/ioport.h	2002-10-31 12:37:01.000000000 +1100
+++ working-2.5.53-deprecated/include/linux/ioport.h	2002-12-28 11:51:46.000000000 +1100
@@ -7,6 +7,7 @@
 
 #ifndef _LINUX_IOPORT_H
 #define _LINUX_IOPORT_H
+#include <linux/compiler.h>
 
 /*
  * Resources are tree-like, allowing
@@ -102,7 +103,7 @@ extern int allocate_resource(struct reso
 extern struct resource * __request_region(struct resource *, unsigned long start, unsigned long n, const char *name);
 
 /* Compatibility cruft */
-#define check_region(start,n)	__check_region(&ioport_resource, (start), (n))
+#define check_region(start,n)	__DEPRECATED(use_request_region_return_value), __check_region(&ioport_resource, (start), (n))
 #define release_region(start,n)	__release_region(&ioport_resource, (start), (n))
 #define check_mem_region(start,n)	__check_region(&iomem_resource, (start), (n))
 #define release_mem_region(start,n)	__release_region(&iomem_resource, (start), (n))

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Mark deprecated functions so they give a warning on use
  2002-12-28  0:57 [PATCH] Mark deprecated functions so they give a warning on use Rusty Russell
@ 2002-12-28  5:54 ` Richard Henderson
  2002-12-28 15:30 ` Alexander Kellett
  1 sibling, 0 replies; 7+ messages in thread
From: Richard Henderson @ 2002-12-28  5:54 UTC (permalink / raw)
  To: Rusty Russell; +Cc: torvalds, linux-kernel, william stinson, trivial

On Sat, Dec 28, 2002 at 11:57:10AM +1100, Rusty Russell wrote:
> +#define __DEPRECATED(msg) ({DEPRECATED_##msg: 1; })
[...]
> +#define check_region(start,n)	__DEPRECATED(use_request_region_return_value), __check_region(&ioport_resource, (start), (n))

So now it's a syntax error to use check_region twice
in the same function?


r~

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Mark deprecated functions so they give a warning on use
  2002-12-28  0:57 [PATCH] Mark deprecated functions so they give a warning on use Rusty Russell
  2002-12-28  5:54 ` Richard Henderson
@ 2002-12-28 15:30 ` Alexander Kellett
  2002-12-28 17:51   ` [PATCH] deprecated function attribute Robert Love
  1 sibling, 1 reply; 7+ messages in thread
From: Alexander Kellett @ 2002-12-28 15:30 UTC (permalink / raw)
  To: Rusty Russell; +Cc: torvalds, linux-kernel, william stinson, trivial

On Sat, Dec 28, 2002 at 11:57:10AM +1100, Rusty Russell wrote:
> If anyone can think of a better way, please share.  This should speed
> up the removal of functions like check_region() (which, despite
> William's janitorial efforts, is still not at the stage where it can
> be removed).

can gcc 3.2's __attribute__((deprecated)) be used?

(someone noted this on kde lists a few days back)

Alex

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] deprecated function attribute
  2002-12-28 15:30 ` Alexander Kellett
@ 2002-12-28 17:51   ` Robert Love
  2002-12-28 18:03     ` Robert Love
  0 siblings, 1 reply; 7+ messages in thread
From: Robert Love @ 2002-12-28 17:51 UTC (permalink / raw)
  To: Alexander Kellett
  Cc: Rusty Russell, torvalds, linux-kernel, william stinson, trivial

On Sat, 2002-12-28 at 10:30, Alexander Kellett wrote:

> can gcc 3.2's __attribute__((deprecated)) be used?

I just tested it and it seems to work.  If we mark a function as
deprecated, then each use of the function emits a warning like:

	foo.c:12: warning: `baz' is deprecated (declared at bar.c:60)

Which is very informative, giving both the location of each usage and
where the little bastard is declared.

It seems like this was added in gcc 3.0, not 3.2?  It was at least in
3.1...

Attached patch adds support for usage of the attribute as "deprecated"
and is backward-compatible.  Usage is:

	int deprecated foo(void)

etc.. The attached patch is _entirely_ untested.

	Robert Love

 compiler.h |   13 +++++++++++++
 1 files changed, 13 insertions(+)


diff -urN linux-2.5.53/include/linux/compiler.h linux/include/linux/compiler.h
--- linux-2.5.53/include/linux/compiler.h	2002-12-28 12:38:56.000000000 -0500
+++ linux/include/linux/compiler.h	2002-12-28 12:45:03.000000000 -0500
@@ -13,6 +13,19 @@
 #define likely(x)	__builtin_expect((x),1)
 #define unlikely(x)	__builtin_expect((x),0)
 
+/*
+ * Allow us to mark functions as 'deprecated' and have gcc emit a nice
+ * warning for each use, in hopes of speeding the functions removal.
+ * Usage is:
+ * 		int deprecated foo(void)
+ * and then gcc will emit a warning for each usage of the function.
+ */
+#if __GNUC__ == 3
+#define deprecated	__attribute__((deprecated))
+#else
+#define deprecated
+#endif
+
 /* This macro obfuscates arithmetic on a variable address so that gcc
    shouldn't recognize the original var, and make assumptions about it */
 #define RELOC_HIDE(ptr, off)					\




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] deprecated function attribute
  2002-12-28 17:51   ` [PATCH] deprecated function attribute Robert Love
@ 2002-12-28 18:03     ` Robert Love
  2002-12-28 18:53       ` Daniel Jacobowitz
  0 siblings, 1 reply; 7+ messages in thread
From: Robert Love @ 2002-12-28 18:03 UTC (permalink / raw)
  To: Alexander Kellett
  Cc: Rusty Russell, torvalds, linux-kernel, william stinson, trivial

On Sat, 2002-12-28 at 12:51, Robert Love wrote:

> +#if __GNUC__ == 3
> +#define deprecated	__attribute__((deprecated))
> +#else
> +#define deprecated
> +#endif

Before someone points it out: I grepped the tree and did not see any
uses of "deprecated" as a token on first glance.  So the above is safe.

If we want to be preemptive, we can rename the above to "__deprecated__"
but I think plain "deprecated" is much better looking.

	Robert Love


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] deprecated function attribute
  2002-12-28 18:03     ` Robert Love
@ 2002-12-28 18:53       ` Daniel Jacobowitz
  2002-12-28 20:50         ` Robert Love
  0 siblings, 1 reply; 7+ messages in thread
From: Daniel Jacobowitz @ 2002-12-28 18:53 UTC (permalink / raw)
  To: linux-kernel

On Sat, Dec 28, 2002 at 01:03:52PM -0500, Robert Love wrote:
> On Sat, 2002-12-28 at 12:51, Robert Love wrote:
> 
> > +#if __GNUC__ == 3
> > +#define deprecated	__attribute__((deprecated))
> > +#else
> > +#define deprecated
> > +#endif
> 
> Before someone points it out: I grepped the tree and did not see any
> uses of "deprecated" as a token on first glance.  So the above is safe.
> 
> If we want to be preemptive, we can rename the above to "__deprecated__"
> but I think plain "deprecated" is much better looking.

Eek, please call it something else - something that looks visibly like
a syntax rather than a name.  __deprecated or __deprecated__ or
DEPRECATED.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] deprecated function attribute
  2002-12-28 18:53       ` Daniel Jacobowitz
@ 2002-12-28 20:50         ` Robert Love
  0 siblings, 0 replies; 7+ messages in thread
From: Robert Love @ 2002-12-28 20:50 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: linux-kernel

On Sat, 2002-12-28 at 13:53, Daniel Jacobowitz wrote:

> > If we want to be preemptive, we can rename the above to "__deprecated__"
> > but I think plain "deprecated" is much better looking.
> 
> Eek, please call it something else - something that looks visibly like
> a syntax rather than a name.  __deprecated or __deprecated__ or
> DEPRECATED.

Like I said, that is fine with me...

Attached.  Still untested :-)

	Robert Love

 compiler.h |   13 +++++++++++++
 1 files changed, 13 insertions(+)


diff -urN linux-2.5.53/include/linux/compiler.h linux/include/linux/compiler.h
--- linux-2.5.53/include/linux/compiler.h	2002-12-28 12:38:56.000000000 -0500
+++ linux/include/linux/compiler.h	2002-12-28 12:45:03.000000000 -0500
@@ -13,6 +13,19 @@
 #define likely(x)	__builtin_expect((x),1)
 #define unlikely(x)	__builtin_expect((x),0)
 
+/*
+ * Allow us to mark functions as 'deprecated' and have gcc emit a nice
+ * warning for each use, in hopes of speeding the functions removal.
+ * Usage is:
+ * 		int deprecated foo(void)
+ * and then gcc will emit a warning for each usage of the function.
+ */
+#if __GNUC__ == 3
+#define __deprecated__		__attribute__((deprecated))
+#else
+#define __deprecated__
+#endif
+
 /* This macro obfuscates arithmetic on a variable address so that gcc
    shouldn't recognize the original var, and make assumptions about it */
 #define RELOC_HIDE(ptr, off)					\




^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2002-12-28 20:39 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-12-28  0:57 [PATCH] Mark deprecated functions so they give a warning on use Rusty Russell
2002-12-28  5:54 ` Richard Henderson
2002-12-28 15:30 ` Alexander Kellett
2002-12-28 17:51   ` [PATCH] deprecated function attribute Robert Love
2002-12-28 18:03     ` Robert Love
2002-12-28 18:53       ` Daniel Jacobowitz
2002-12-28 20:50         ` Robert Love

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox