Open MPI logo

Hardware Locality Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Hardware Locality Development mailing list

Subject: [hwloc-devel] Attribute unsed not regognized
From: Bert Wesarg (bert.wesarg_at_[hidden])
Date: 2010-03-26 06:09:05


I still get warnings for unused parameters from the hwloc/helper.h
header. The code to check this attribute is this:

         int square(int arg1 __attribute__ ((__unused__)), int arg2);
         int square(int arg1, int arg2) { return arg2; }

But this results in this conflig.log output:

configure:11129: checking for __attribute__(unused)
configure:11152: gcc -std=gnu99 -c -Wall -Wunused-parameter -Wundef
-Wno-long-long -Wsign-compare -Wmissing-prototypes -Wstrict-prototypes
-Wcomment -pedantic conftest.c >&5
conftest.c: In function 'square':
conftest.c:44: warning: unused parameter 'arg1'
conftest.c: At top level:
conftest.c:48: warning: function declaration isn't a prototype
configure:11152: $? = 0
configure:11236: result: yes

AFAIK the correct usage would be:

         int square(int __attribute__ ((__unused__)) arg1, int arg2) {
return arg2; }

I.e. the attribute is between type and name. Also, it needs to be in
the declaration not in the prototype. The output for this code is:

configure:11129: checking for __attribute__(unused)
configure:11151: gcc -std=gnu99 -c -Wall -Wunused-parameter -Wundef
-Wno-long-long -Wsign-compare -Wmissing-prototypes -Wstrict-prototypes
-Wcomment -pedantic conftest.c >&5
conftest.c:43: warning: no previous prototype for 'square'
conftest.c:47: warning: function declaration isn't a prototype
configure:11151: $? = 0
configure:11235: result: yes

This results only in a warning that the prototype is missing.

Also, the use of the unused attribute for static functions does not
need a prototype:

         extern int square1(int arg1, int arg2);
         int square1(int arg1 __attribute__ ((__unused__)), int arg2)
{ return arg2; }

         static int __attribute__ ((__unused__)) square2(int arg1, int
arg2) { return arg1 * arg2; }

Results in this output:

configure:11129: checking for __attribute__(unused)
configure:11154: gcc -std=gnu99 -c -Wall -Wunused-parameter -Wundef
-Wno-long-long -Wsign-compare -Wmissing-prototypes -Wstrict-prototypes
-Wcomment -pedantic conftest.c >&5
conftest.c:50: warning: function declaration isn't a prototype
configure:11154: $? = 0
configure:11238: result: yes

This is on ubuntu woth this compiler:

$ gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr
--enable-shared --enable-multiarch --enable-linker-build-id
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4
--program-suffix=-4.4 --enable-nls --enable-clocale=gnu
--enable-libstdcxx-debug --enable-objc-gc --disable-werror
--with-arch-32=i486 --with-tune=generic --enable-checking=release
--build=x86_64-linux-gnu --host=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9)