opensm/complib: redundant redeclaration of functions
Hi Sasha,
There are couple of places in complib headers that cause compiler to complain:
cl_atomic.h:73: warning: redundant redeclaration of 'cl_atomic_inc' cl_atomic_osd.h:58: warning: previous definition of 'cl_atomic_inc' was here
cl_atomic.h:104: warning: redundant redeclaration of 'cl_atomic_dec' cl_atomic_osd.h:69: warning: previous definition of 'cl_atomic_dec' was here
cl_atomic.h:136: warning: redundant redeclaration of 'cl_atomic_add' cl_atomic_osd.h:81: warning: previous definition of 'cl_atomic_add' was here
cl_atomic.h:171: warning: redundant redeclaration of 'cl_atomic_sub' cl_atomic_osd.h:93: warning: previous definition of 'cl_atomic_sub' was here
cl_thread.h:346: warning: redundant redeclaration of 'cl_is_blockable' cl_thread_osd.h:63: warning: previous definition of 'cl_is_blockable' was here
In general, here's the problem:
We have cl_file.h and cl_file_osd.h. cl_file.h has include directive for cl_file_osd.h cl_file.h has the following definition of function:
int foo();
cl_file_osd.h has another function definition, but this time it also has implementation:
static inline int foo() { ..... }Any preferable way to fix this?
Get rid of the _osd.h files and have the functions implementation included in the usual .h file?
Define some *_HAVE_OSD flag in the _osd.h file
and enclose function declaration in the usual .h
file with #ifndef?
Any other ideas (I'd go for option 2)?
-- Yevgeny
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 4B66D189.2090500-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org
Quoted 5 lines · Yevgeny Kliteynik
In general, here's the problem:
We have
cl_file.handcl_file_osd.h.cl_file.hhas include directive forcl_file_osd.hcl_file.hhas the following definition of function:
Quoted 7 lines
int foo();
cl_file_osd.hhas another function definition, but this time it also has implementation:static inline int foo() { ..... }Any preferable way to fix this?
It looks to me like using 'extern inline' is appropriate here:
extern inline int foo();
[..]
inline int foo()
{
body
}
If no inline version is defined then the compiler just emits a normal function call, if an inline version is defined then the compiler might use it.
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20100201184616.GC25902-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Quoted 21 lines · Jason Gunthorpe
Quoted 5 lines · Yevgeny Kliteynik
In general, here's the problem:
We have
cl_file.handcl_file_osd.h.cl_file.hhas include directive forcl_file_osd.hcl_file.hhas the following definition of function:Quoted 7 lines
int foo();
cl_file_osd.hhas another function definition, but this time it also has implementation:static inline int foo() { ..... }Any preferable way to fix this?
It looks to me like using 'extern inline' is appropriate here:
extern inline int
foo();[..]
Quoted 8 lines
inline int
foo()
{
body
}If no inline version is defined then the compiler just emits a normal function call, if an inline version is defined then the compiler might use it.
Thanks for the idea.
I read some documentation about it, and it does look that your suggestion should fix the problem, but it didn't :( Probably because they both are in .h files.
-- Yevgeny
Quoted 2 lines
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 4B68247E.6070405-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org
Quoted 9 lines · Yevgeny Kliteynik
Quoted 3 lines
If no inline version is defined then the compiler just emits a normal function call, if an inline version is defined then the compiler might use it.
Thanks for the idea.
I read some documentation about it, and it does look that your suggestion should fix the problem, but it didn't :(Probably because they both are in .h files.
No, but they do have to be in the right order.
first header:
extern inline int foo();
inline int foo()
{
body
}
2nd header:
extern inline int foo();
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html