Project

General

Profile

Actions

Bug #1375

closed

userspace-rcu-0.14.0: /usr/include/urcu/wfcqueue.h has duplicate definitions of cds_wfcq_head_cast_cpp()

Added by Kaleb KEITHLEY 12 months ago. Updated 12 months ago.

Status:
Resolved
Priority:
High
Assignee:
-
Target version:
Start date:
05/02/2023
Due date:
% Done:

0%

Estimated time:

Description

/usr/include/urcu/wfcqueue.h has duplicate definitions of cds_wfcq_head_cast_cpp() at line 505 and again at line 511.

Looks like a cut-and-paste mistake

Actions #2

Updated by Michael Jeanson 12 months ago

The type of the 'head' parameter differs, that should be valid in C++

static inline cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(struct __cds_wfcq_head *head)
static inline cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(struct cds_wfcq_head *head)

What's the compiler error in nfs-ganesha ?

Actions #3

Updated by Kaleb KEITHLEY 12 months ago

/usr/include/urcu/wfcqueue.h:511:35: error: conflicting declaration of C function 'cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(cds_wfcq_head*)'
511 | static inline cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(struct cds_wfcq_head *head) | ^~~~~~~~~~~~~~~~~~~~
/usr/include/urcu/wfcqueue.h:505:35: note: previous declaration 'cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(__cds_wfcq_head*)'
505 | static inline cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(struct __cds_wfcq_head *head) | ^~~~~~~~~~~~~~~~~~~~

There are more errors after that too. Full build log at https://kojipkgs.fedoraproject.org/work/tasks/7776/100647776/build.log

Actions #4

Updated by Kaleb KEITHLEY 12 months ago

[ 42%] Building CXX object monitoring/CMakeFiles/monitoring.dir/monitoring.cc.o
cd /builddir/build/BUILD/nfs-ganesha-5.1/src/redhat-linux-build/monitoring && /usr/bin/g++ -DHAS_DOFF -D_GNU_SOURCE=1 -I/usr/include/uuid -I/builddir/build/BUILD/nfs-ganesha-5.1/src/redhat-linux-build/include -I/builddir/build/BUILD/nfs-ganesha-5.1/src/include -I/builddir/build/BUILD/nfs-ganesha-5.1/src/include/os/linux -I/include -I/usr/include/ntirpc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -O2 -g -DNDEBUG -std=gnu++17 -fPIC -MD -MT monitoring/CMakeFiles/monitoring.dir/monitoring.cc.o -MF CMakeFiles/monitoring.dir/monitoring.cc.o.d -o CMakeFiles/monitoring.dir/monitoring.cc.o -c /builddir/build/BUILD/nfs-ganesha-5.1/src/monitoring/monitoring.cc
...
In file included from /usr/include/urcu/call-rcu.h:33,
from /usr/include/urcu/urcu-bp.h:197,
from /usr/include/urcu-bp.h:2,
from /builddir/build/BUILD/nfs-ganesha-5.1/src/include/fsal_api.h:44,
from /builddir/build/BUILD/nfs-ganesha-5.1/src/include/fsal.h:63,
from /builddir/build/BUILD/nfs-ganesha-5.1/src/include/nfs_convert.h:42,
from /builddir/build/BUILD/nfs-ganesha-5.1/src/monitoring/monitoring.cc:38:
/usr/include/urcu/wfcqueue.h:511:35: error: conflicting declaration of C function 'cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(cds_wfcq_head*)'
511 | static inline cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(struct cds_wfcq_head *head) | ^~~~~~~~~~~~~~~~~~~~
/usr/include/urcu/wfcqueue.h:505:35: note: previous declaration 'cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(__cds_wfcq_head*)'
505 | static inline cds_wfcq_head_ptr_t cds_wfcq_head_cast_cpp(struct __cds_wfcq_head *head) | ^~~~~~~~~~~~~~~~~~~~

Actions #5

Updated by Kaleb KEITHLEY 12 months ago

I think the hint is that for some reason the compiler thinks these are both C functions (and not C++); "... conflicting declaration of C function..." which is not valid in C.

As to why the compiler thinks they are C functions though is anyone's guess.

Actions #6

Updated by Michael Jeanson 12 months ago

I'll try to reproduce this locally and see what we can do.

Actions #7

Updated by Kaleb KEITHLEY 12 months ago

I think it's probably some sloppy nexted 'extern "C" { ... } in a patch we got from g****e that wasn't caught before with userspace-rcu-13 which didn't have any c++ in wfcqueue.h

Actions #8

Updated by Michael Jeanson 12 months ago

I indeed get the same error if I include 'urcu/wfcqueue.h' inside an 'extern "C"'.

Userspace-RCU 0.13 had some C++ sprinkled here and there but 0.14 is the first release with proper end-to-end support for C++.

Actions #9

Updated by Kaleb KEITHLEY 12 months ago

I cleaned up the ganesha headers, eliminating the nested 'extern "C" {...}' and have a successful build. You can close this a not a bug. Sorry for the false alarm.

Actions #10

Updated by Michael Jeanson 12 months ago

  • Status changed from New to Resolved

Ok, thanks for the follow-up.

Actions

Also available in: Atom PDF