Commit afbc5b3
authored
[C++] Get rid of compiler warnings (#703)
When Java.Interop is built with GCC (e.g. on Linux or with MinGW),
the flags Xamarin.Android passes to the compiler cause a handful of
warnings to be shown regarding incomplete field assignment when
initializing structure instances:
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::BridgeProcessing_type’ [-Wmissing-field-initializers]
259 | JavaInteropGCBridge bridge = {0};
| ^
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::BridgeProcessing_field’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::BridgeProcessing_vtables_count’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::BridgeProcessing_vtables_length’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::BridgeProcessing_domains’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::BridgeProcessing_vtables’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::num_bridge_types’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::mono_java_gc_bridge_info’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::gc_disabled’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::gc_gref_count’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::gc_weak_gref_count’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::Runtime_instance’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::Runtime_gc’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::WeakReference_class’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::WeakReference_init’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::WeakReference_get’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::GCUserPeerable_class’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::GCUserPeerable_add’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::GCUserPeerable_clear’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::gref_log’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::lref_log’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::gref_path’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::lref_path’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::gref_log_level’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::lref_log_level’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::gref_cleanup’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:259:33: warning: missing initializer for member ‘JavaInteropGCBridge::lref_cleanup’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc: In function ‘_jmethodID* get_add_reference_method(JavaInteropGCBridge*, JNIEnv*, jobject, MonoClass*)’:
java-interop-gc-bridge-mono.cc:1283:41: warning: missing initializer for member ‘MonoGCBridgeCallbacks::bridge_class_kind’ [-Wmissing-field-initializers]
1283 | MonoGCBridgeCallbacks bridge_cbs = {0};
| ^
java-interop-gc-bridge-mono.cc:1283:41: warning: missing initializer for member ‘MonoGCBridgeCallbacks::is_bridge_object’ [-Wmissing-field-initializers]
java-interop-gc-bridge-mono.cc:1283:41: warning: missing initializer for member ‘MonoGCBridgeCallbacks::cross_references’ [-Wmissing-field-initializers]
Instead of initializing every field, simply use **memset**(3) to
initialize the structure memory to `0`.
Another warning fixed by this commit is one regarding unused function
parameters:
java-interop-gc-bridge-mono.cc:899:93: warning: unused parameter ‘mclass’ [-Wunused-parameter]
899 | get_add_reference_method (JavaInteropGCBridge *bridge, JNIEnv *env, jobject obj, MonoClass *mclass)
| ~~~~~~~~~~~^~~~~~
Yet another fixed warning relates to MinGW `RELEASE` builds only:
java-interop-util.cc: In function ‘char* utf16_to_utf8(const wchar_t*)’:
java-interop/java-interop-util.cc:11:6: warning: unused variable ‘converted_size’ [-Wunused-variable]
11 | int converted_size = WideCharToMultiByte (CP_UTF8, 0, widestr, -1, mbstr, required_size, NULL, NULL);
| ^~~~~~~~~~~~~~
java-interop/java-interop-util.cc: In function ‘wchar_t* utf8_to_utf16(const char*)’:
java-interop/java-interop-util.cc:23:6: warning: unused variable ‘converted_chars’ [-Wunused-variable]
23 | int converted_chars = MultiByteToWideChar (CP_UTF8, 0, mbstr, -1, widestr, required_chars);
| ^~~~~~~~~~~~~~~
These warnings are shown because the `assert()` macro used in the
above functions are not compiled in `RELEASE` builds, which leaves
the variables mentioned above indeed unused.1 parent e295b49 commit afbc5b3
File tree
2 files changed
+9
-3
lines changed- src/java-interop
2 files changed
+9
-3
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
256 | 256 | | |
257 | 257 | | |
258 | 258 | | |
259 | | - | |
| 259 | + | |
| 260 | + | |
260 | 261 | | |
261 | 262 | | |
262 | 263 | | |
| |||
896 | 897 | | |
897 | 898 | | |
898 | 899 | | |
899 | | - | |
| 900 | + | |
900 | 901 | | |
901 | 902 | | |
902 | 903 | | |
| |||
1280 | 1281 | | |
1281 | 1282 | | |
1282 | 1283 | | |
1283 | | - | |
| 1284 | + | |
| 1285 | + | |
1284 | 1286 | | |
1285 | 1287 | | |
1286 | 1288 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
| 14 | + | |
13 | 15 | | |
14 | 16 | | |
15 | 17 | | |
| |||
22 | 24 | | |
23 | 25 | | |
24 | 26 | | |
| 27 | + | |
| 28 | + | |
25 | 29 | | |
26 | 30 | | |
27 | 31 | | |
| |||
0 commit comments