Skip to contentSkip to conversation

opensm/complib: redundant redeclaration of functions

DISCUSSION Yevgeny Kliteynik 2 participants 4 messages Feb 1, 2010 – Feb 2, 2010 3 messages not in the archive InfiniBand

lore
Share & tools
lore
#0 lore raw

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

#2 lore raw
Quoted 5 lines · Yevgeny Kliteynik

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:

Quoted 7 lines
	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?

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

#4 lore raw
Quoted 21 lines · Jason Gunthorpe
Quoted 5 lines · Yevgeny Kliteynik

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:

Quoted 7 lines
	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?

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

#6 lore raw
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