Open
Description
Expected Behavior
Function with wchar_t
as a parameter should generate successfully.
Actual Behavior
Function with wchar_t
is generated using std::uint32_t
instead of wchar_t
, emitting a clang error.
Clang error
/Users/jjacobson/code/rust/autocxx-bad/target/debug/build/autocxx-bad-cd65df0090aaca31/out/autocxx-build-dir/cxx/gen0.cxx:75:21: error: cannot initialize a variable of type '::std::uint32_t (*)(::std::uint32_t)' (aka 'unsigned int (*)(unsigned int)') with an lvalue of type 'wchar_t (wchar_t)': type mismatch at 1st parameter ('::std::uint32_t' (aka 'unsigned int') vs 'wchar_t')
::std::uint32_t (*nextWchar$)(::std::uint32_t) = ::nextWchar;
^ ~~~~~~~~~~~
1 error generated.
Full error from running build
Caused by:
process didn't exit successfully: `/Users/jjacobson/code/rust/autocxx-bad/target/debug/build/autocxx-bad-82a9b27e51324d18/build-script-build` (exit status: 1)
--- stdout
cargo:rerun-if-changed=src/bad.hpp
TARGET = Some("aarch64-apple-darwin")
OPT_LEVEL = Some("0")
HOST = Some("aarch64-apple-darwin")
CXX_aarch64-apple-darwin = None
CXX_aarch64_apple_darwin = None
HOST_CXX = None
CXX = None
CXXFLAGS_aarch64-apple-darwin = None
CXXFLAGS_aarch64_apple_darwin = None
HOST_CXXFLAGS = None
CXXFLAGS = None
CRATE_CC_NO_DEFAULTS = None
DEBUG = Some("true")
CARGO_CFG_TARGET_FEATURE = None
CXX_aarch64-apple-darwin = None
CXX_aarch64_apple_darwin = None
HOST_CXX = None
CXX = None
CXXFLAGS_aarch64-apple-darwin = None
CXXFLAGS_aarch64_apple_darwin = None
HOST_CXXFLAGS = None
CXXFLAGS = None
CRATE_CC_NO_DEFAULTS = None
CARGO_CFG_TARGET_FEATURE = None
running: "c++" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-fno-omit-frame-pointer" "-arch" "arm64" "-I" "src" "-I" "/Users/jjacobson/code/rust/autocxx-bad/target/debug/build/autocxx-bad-cd65df0090aaca31/out/autocxx-build-dir/include" "-Wall" "-Wextra" "-std=c++14" "-o" "/Users/jjacobson/code/rust/autocxx-bad/target/debug/build/autocxx-bad-cd65df0090aaca31/out/autocxx-build-dir/cxx/gen0.o" "-c" "/Users/jjacobson/code/rust/autocxx-bad/target/debug/build/autocxx-bad-cd65df0090aaca31/out/autocxx-build-dir/cxx/gen0.cxx"
cargo:warning=/Users/jjacobson/code/rust/autocxx-bad/target/debug/build/autocxx-bad-cd65df0090aaca31/out/autocxx-build-dir/cxx/gen0.cxx:75:21: error: cannot initialize a variable of type '::std::uint32_t (*)(::std::uint32_t)' (aka 'unsigned int (*)(unsigned int)') with an lvalue of type 'wchar_t (wchar_t)': type mismatch at 1st parameter ('::std::uint32_t' (aka 'unsigned int') vs 'wchar_t')
cargo:warning= ::std::uint32_t (*nextWchar$)(::std::uint32_t) = ::nextWchar;
cargo:warning= ^ ~~~~~~~~~~~
cargo:warning=1 error generated.
exit status: 1
--- stderr
error occurred: Command "c++" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-fno-omit-frame-pointer" "-arch" "arm64" "-I" "src" "-I" "/Users/jjacobson/code/rust/autocxx-bad/target/debug/build/autocxx-bad-cd65df0090aaca31/out/autocxx-build-dir/include" "-Wall" "-Wextra" "-std=c++14" "-o" "/Users/jjacobson/code/rust/autocxx-bad/target/debug/build/autocxx-bad-cd65df0090aaca31/out/autocxx-build-dir/cxx/gen0.o" "-c" "/Users/jjacobson/code/rust/autocxx-bad/target/debug/build/autocxx-bad-cd65df0090aaca31/out/autocxx-build-dir/cxx/gen0.cxx" with args "c++" did not execute successfully (status code exit status: 1).
Steps to Reproduce the Problem
- Create a project with the following (or pull from this repository: https://github.com/jjacobson93/autocxx-bad):
Cargo.toml
[package]
name = "autocxx-bad"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
autocxx = "0.22.3"
cxx = "1.0"
[build-dependencies]
autocxx-build = "0.22.3"
miette = { version="4.3", features=["fancy"] } # optional but gives nicer error messages!
build.rs
fn main() -> miette::Result<()> {
let path = std::path::PathBuf::from("src"); // include path
let mut b = autocxx_build::Builder::new("src/main.rs", &[&path]).build()?;
// This assumes all your C++ bindings are in main.rs
b.flag_if_supported("-std=c++14").compile("autocxx-bad"); // arbitrary library name, pick anything
println!("cargo:rerun-if-changed=src/main.rs");
// Add instructions to link to any C++ libraries you need.
Ok(())
}
src/main.rs
use autocxx::prelude::*;
include_cpp! {
#include "bad.hpp"
safety!(unsafe)
generate!("nextWchar")
}
fn main() {}
bad.hpp
wchar_t nextWchar(wchar_t c);
bad.cpp
#include "bad.hpp"
wchar_t nextWchar(wchar_t c) { return c + 1; }
- Run
cargo build
at the root of the project. - See errors!
Specifications
cargo version -v
cargo 1.59.0 (49d8809dc 2022-02-10)
release: 1.59.0
commit-hash: 49d8809dc2d3e6e0d5ec634fcf26d8e2aab67130
commit-date: 2022-02-10
host: aarch64-apple-darwin
libgit2: 1.3.0 (sys:0.13.23 vendored)
libcurl: 7.64.1 (sys:0.4.51+curl-7.80.0 system ssl:(SecureTransport) LibreSSL/2.8.3)
os: Mac OS 11.5.2 [64-bit]