-
Notifications
You must be signed in to change notification settings - Fork 369
Open
Description
Since Clang 11 (commit 7ae1b4a0ce9c) and soon in GCC 16 (commit 828c48f0680e), test_body fails on non-c-typedef-for-linkage.
With clang-21.1.8-6.fc44.x86_64:
Running: "/root/cbindgen/target/debug/cbindgen" "--output" "/root/cbindgen/tests/expectations/body.compat.c" "--depfile" "/tmp/.tmpJyyVas" "--lang" "c" "--cpp-compat" "--style" "type" "--config" "/root/cbindgen/tests/rust/body.toml" "/root/cbindgen/tests/rust/body.rs"
Running: "clang" "-D" "DEFINED" "-I" "/root/cbindgen/tests" "-Wall" "-Werror" "-Wno-attributes" "-Wno-unused-const-variable" "-Wno-return-type-c-linkage" "-Wno-deprecated-declarations" "-D" "CBINDGEN_STYLE_TYPE" "-D" "CBINDGEN_CPP_COMPAT" "-o" "/tmp/cbindgen-test-outputIdxH5u/body.compat.o" "-c" "/root/cbindgen/tests/expectations/body.compat.c"
Running: "clang++" "-D" "DEFINED" "-I" "/root/cbindgen/tests" "-Wall" "-Werror" "-Wno-attributes" "-Wno-unused-const-variable" "-Wno-return-type-c-linkage" "-Wno-deprecated-declarations" "-std=c++17" "-x" "c++" "-D" "CBINDGEN_STYLE_TYPE" "-D" "CBINDGEN_CPP_COMPAT" "-o" "/tmp/cbindgen-test-outputIdxH5u/body.compat.o" "-c" "/root/cbindgen/tests/expectations/body.compat.c"
thread 'test_body' (37465) panicked at tests/tests.rs:214:5:
Output failed to compile: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "/root/cbindgen/tests/expectations/body.compat.c:18:15: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Werror,-Wnon-c-typedef-for-linkage]\n 18 | typedef struct {\n | ^\n | MyFancyStruct\n/root/cbindgen/tests/expectations/body.compat.c:21:5: note: type is not C-compatible due to this member declaration\n 21 | inline void foo();\n | ^~~~~~~~~~~~~~~~~\n/root/cbindgen/tests/expectations/body.compat.c:23:3: note: type is given name 'MyFancyStruct' for linkage purposes by this typedef declaration\n 23 | } MyFancyStruct;\n | ^\n/root/cbindgen/tests/expectations/body.compat.c:31:15: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Werror,-Wnon-c-typedef-for-linkage]\n 31 | typedef struct {\n | ^\n | MyFancyEnum\n/root/cbindgen/tests/expectations/body.compat.c:42:5: note: type is not C-compatible due to this member declaration\n 42 | inline void wohoo();\n | ^~~~~~~~~~~~~~~~~~~\n/root/cbindgen/tests/expectations/body.compat.c:44:3: note: type is given name 'MyFancyEnum' for linkage purposes by this typedef declaration\n 44 | } MyFancyEnum;\n | ^\n/root/cbindgen/tests/expectations/body.compat.c:52:15: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Werror,-Wnon-c-typedef-for-linkage]\n 52 | typedef struct {\n | ^\n | MyFancyStruct_Prepended\n/root/cbindgen/tests/expectations/body.compat.c:54:5: note: type is not C-compatible due to this member declaration\n 54 | inline void prepended_wohoo();\n | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n/root/cbindgen/tests/expectations/body.compat.c:57:3: note: type is given name 'MyFancyStruct_Prepended' for linkage purposes by this typedef declaration\n 57 | } MyFancyStruct_Prepended;\n | ^\n/root/cbindgen/tests/expectations/body.compat.c:65:15: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Werror,-Wnon-c-typedef-for-linkage]\n 65 | typedef struct {\n | ^\n | MyFancyEnum_Prepended\n/root/cbindgen/tests/expectations/body.compat.c:67:5: note: type is not C-compatible due to this member declaration\n 67 | inline void wohoo();\n | ^~~~~~~~~~~~~~~~~~~\n/root/cbindgen/tests/expectations/body.compat.c:78:3: note: type is given name 'MyFancyEnum_Prepended' for linkage purposes by this typedef declaration\n 78 | } MyFancyEnum_Prepended;\n | ^\n4 errors generated.\n" }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
newline-expanded clang stderr:
/root/cbindgen/tests/expectations/body.compat.c:18:15: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Werror,-Wnon-c-typedef-for-linkage]
18 | typedef struct {
| ^
| MyFancyStruct
/root/cbindgen/tests/expectations/body.compat.c:21:5: note: type is not C-compatible due to this member declaration
21 | inline void foo();
| ^~~~~~~~~~~~~~~~~
/root/cbindgen/tests/expectations/body.compat.c:23:3: note: type is given name 'MyFancyStruct' for linkage purposes by this typedef declaration
23 | } MyFancyStruct;
| ^
/root/cbindgen/tests/expectations/body.compat.c:31:15: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Werror,-Wnon-c-typedef-for-linkage]
31 | typedef struct {
| ^
| MyFancyEnum
/root/cbindgen/tests/expectations/body.compat.c:42:5: note: type is not C-compatible due to this member declaration
42 | inline void wohoo();
| ^~~~~~~~~~~~~~~~~~~
/root/cbindgen/tests/expectations/body.compat.c:44:3: note: type is given name 'MyFancyEnum' for linkage purposes by this typedef declaration
44 | } MyFancyEnum;
| ^
/root/cbindgen/tests/expectations/body.compat.c:52:15: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Werror,-Wnon-c-typedef-for-linkage]
52 | typedef struct {
| ^
| MyFancyStruct_Prepended
/root/cbindgen/tests/expectations/body.compat.c:54:5: note: type is not C-compatible due to this member declaration
54 | inline void prepended_wohoo();
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/cbindgen/tests/expectations/body.compat.c:57:3: note: type is given name 'MyFancyStruct_Prepended' for linkage purposes by this typedef declaration
57 | } MyFancyStruct_Prepended;
| ^
/root/cbindgen/tests/expectations/body.compat.c:65:15: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Werror,-Wnon-c-typedef-for-linkage]
65 | typedef struct {
| ^
| MyFancyEnum_Prepended
/root/cbindgen/tests/expectations/body.compat.c:67:5: note: type is not C-compatible due to this member declaration
67 | inline void wohoo();
| ^~~~~~~~~~~~~~~~~~~
/root/cbindgen/tests/expectations/body.compat.c:78:3: note: type is given name 'MyFancyEnum_Prepended' for linkage purposes by this typedef declaration
78 | } MyFancyEnum_Prepended;
| ^
4 errors generated.
With gcc-16.0.1-0.5.fc44.x86_64:
Running: "/root/cbindgen/target/debug/cbindgen" "--output" "/root/cbindgen/tests/expectations/body.compat.c" "--depfile" "/tmp/.tmp4IgFnp" "--lang" "c" "--cpp-compat" "--style" "type" "--config" "/root/cbindgen/tests/rust/body.toml" "/root/cbindgen/tests/rust/body.rs"
Running: "gcc" "-D" "DEFINED" "-I" "/root/cbindgen/tests" "-Wall" "-Werror" "-Wno-attributes" "-Wno-unused-const-variable" "-Wno-return-type-c-linkage" "-Wno-deprecated-declarations" "-D" "CBINDGEN_STYLE_TYPE" "-D" "CBINDGEN_CPP_COMPAT" "-o" "/tmp/cbindgen-test-outputHh99aD/body.compat.o" "-c" "/root/cbindgen/tests/expectations/body.compat.c"
Running: "g++" "-D" "DEFINED" "-I" "/root/cbindgen/tests" "-Wall" "-Werror" "-Wno-attributes" "-Wno-unused-const-variable" "-Wno-return-type-c-linkage" "-Wno-deprecated-declarations" "-std=c++17" "-x" "c++" "-D" "CBINDGEN_STYLE_TYPE" "-D" "CBINDGEN_CPP_COMPAT" "-o" "/tmp/cbindgen-test-outputHh99aD/body.compat.o" "-c" "/root/cbindgen/tests/expectations/body.compat.c"
thread 'test_body' (37474) panicked at tests/tests.rs:214:5:
Output failed to compile: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "/root/cbindgen/tests/expectations/body.compat.c:18:16: error: anonymous non-C-compatible type given name for linkage purposes by ‘typedef’ declaration [-Werror=non-c-typedef-for-linkage]\n 18 | typedef struct {\n | ^\n | MyFancyStruct\n/root/cbindgen/tests/expectations/body.compat.c:21:17: note: type is not C-compatible because it contains ‘void MyFancyStruct::foo()’ declaration\n 21 | inline void foo();\n | ^~~\n/root/cbindgen/tests/expectations/body.compat.c:31:16: error: anonymous non-C-compatible type given name for linkage purposes by ‘typedef’ declaration [-Werror=non-c-typedef-for-linkage]\n 31 | typedef struct {\n | ^\n | MyFancyEnum\n/root/cbindgen/tests/expectations/body.compat.c:42:17: note: type is not C-compatible because it contains ‘void MyFancyEnum::wohoo()’ declaration\n 42 | inline void wohoo();\n | ^~~~~\n/root/cbindgen/tests/expectations/body.compat.c:52:16: error: anonymous non-C-compatible type given name for linkage purposes by ‘typedef’ declaration [-Werror=non-c-typedef-for-linkage]\n 52 | typedef struct {\n | ^\n | MyFancyStruct_Prepended\n/root/cbindgen/tests/expectations/body.compat.c:54:17: note: type is not C-compatible because it contains ‘void MyFancyStruct_Prepended::prepended_wohoo()’ declaration\n 54 | inline void prepended_wohoo();\n | ^~~~~~~~~~~~~~~\n/root/cbindgen/tests/expectations/body.compat.c:65:16: error: anonymous non-C-compatible type given name for linkage purposes by ‘typedef’ declaration [-Werror=non-c-typedef-for-linkage]\n 65 | typedef struct {\n | ^\n | MyFancyEnum_Prepended\n/root/cbindgen/tests/expectations/body.compat.c:67:17: note: type is not C-compatible because it contains ‘void MyFancyEnum_Prepended::wohoo()’ declaration\n 67 | inline void wohoo();\n | ^~~~~\ncc1plus: note: unrecognized command-line option ‘-Wno-return-type-c-linkage’ may have been intended to silence earlier diagnostics\ncc1plus: all warnings being treated as errors\n" }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
newline-expanded gcc stderr:
/root/cbindgen/tests/expectations/body.compat.c:18:16: error: anonymous non-C-compatible type given name for linkage purposes by ‘typedef’ declaration [-Werror=non-c-typedef-for-linkage]
18 | typedef struct {
| ^
| MyFancyStruct
/root/cbindgen/tests/expectations/body.compat.c:21:17: note: type is not C-compatible because it contains ‘void MyFancyStruct::foo()’ declaration
21 | inline void foo();
| ^~~
/root/cbindgen/tests/expectations/body.compat.c:31:16: error: anonymous non-C-compatible type given name for linkage purposes by ‘typedef’ declaration [-Werror=non-c-typedef-for-linkage]
31 | typedef struct {
| ^
| MyFancyEnum
/root/cbindgen/tests/expectations/body.compat.c:42:17: note: type is not C-compatible because it contains ‘void MyFancyEnum::wohoo()’ declaration
42 | inline void wohoo();
| ^~~~~
/root/cbindgen/tests/expectations/body.compat.c:52:16: error: anonymous non-C-compatible type given name for linkage purposes by ‘typedef’ declaration [-Werror=non-c-typedef-for-linkage]
52 | typedef struct {
| ^
| MyFancyStruct_Prepended
/root/cbindgen/tests/expectations/body.compat.c:54:17: note: type is not C-compatible because it contains ‘void MyFancyStruct_Prepended::prepended_wohoo()’ declaration
54 | inline void prepended_wohoo();
| ^~~~~~~~~~~~~~~
/root/cbindgen/tests/expectations/body.compat.c:65:16: error: anonymous non-C-compatible type given name for linkage purposes by ‘typedef’ declaration [-Werror=non-c-typedef-for-linkage]
65 | typedef struct {
| ^
| MyFancyEnum_Prepended
/root/cbindgen/tests/expectations/body.compat.c:67:17: note: type is not C-compatible because it contains ‘void MyFancyEnum_Prepended::wohoo()’ declaration
67 | inline void wohoo();
| ^~~~~
cc1plus: note: unrecognized command-line option ‘-Wno-return-type-c-linkage’ may have been intended to silence earlier diagnostics
cc1plus: all warnings being treated as errors
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels