This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Add const attr to gnu_dev_{major,minor,makedev}


gnu_dev_{major,minor,makedev} do not examine any values except their
arguments and moreover, they do not read any global variable.  Thus
we might mark them as `const'.  

2011-07-12  Marek Polacek  <mpolacek@redhat.com>

	* misc/sys/cdefs.h: Add support for const attribute.
	* sysdeps/unix/sysv/linux/sys/sysmacros.h: Add __attribute_const__
	to gnu_dev_{major,minor,makedev} functions.

--- libc/sysdeps/unix/sysv/linux/sys/sysmacros.h.mp	2011-07-11 11:38:57.865575287 +0200
+++ libc/sysdeps/unix/sysv/linux/sys/sysmacros.h	2011-07-12 13:52:30.411146608 +0200
@@ -31,29 +31,29 @@ __BEGIN_DECLS
 
 __extension__
 extern unsigned int gnu_dev_major (unsigned long long int __dev)
-     __THROW;
+     __THROW __attribute_const__;
 __extension__
 extern unsigned int gnu_dev_minor (unsigned long long int __dev)
-     __THROW;
+     __THROW __attribute_const__;
 __extension__
 extern unsigned long long int gnu_dev_makedev (unsigned int __major,
 					       unsigned int __minor)
-     __THROW;
+     __THROW __attribute_const__;
 
 # if defined __GNUC__ && __GNUC__ >= 2 && defined __USE_EXTERN_INLINES
-__extension__ __extern_inline unsigned int
+__extension__ __extern_inline __attribute_const__ unsigned int
 __NTH (gnu_dev_major (unsigned long long int __dev))
 {
   return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
 }
 
-__extension__ __extern_inline unsigned int
+__extension__ __extern_inline __attribute_const__ unsigned int
 __NTH (gnu_dev_minor (unsigned long long int __dev))
 {
   return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
 }
 
-__extension__ __extern_inline unsigned long long int
+__extension__ __extern_inline __attribute_const__ unsigned long long int
 __NTH (gnu_dev_makedev (unsigned int __major, unsigned int __minor))
 {
   return ((__minor & 0xff) | ((__major & 0xfff) << 8)
--- libc/misc/sys/cdefs.h.mp	2011-07-11 12:00:25.531575421 +0200
+++ libc/misc/sys/cdefs.h	2011-07-12 14:18:54.419671839 +0200
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-2001, 2002, 2004, 2005, 2006, 2007, 2009
+/* Copyright (C) 1992-2001, 2002, 2004, 2005, 2006, 2007, 2009, 2011
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -218,6 +218,13 @@
 # define __attribute_pure__ /* Ignore */
 #endif
 
+/* This declaration tells the compiler that the value is constant.  */
+#if __GNUC_PREREQ (2,5)
+# define __attribute_const__ __attribute__ ((__const__))
+#else
+# define __attribute_const__ /* Ignore */
+#endif
+
 /* At some point during the gcc 3.1 development the `used' attribute
    for functions was introduced.  We don't want to use it unconditionally
    (although this would be possible) since it generates warnings.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]