-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NPE when using objc_library+cc_library as deps for cc_test #7721
Comments
Can anyone check whether it's a recent regression? (try with 0.22) |
Tested with 0.22.0:
|
I'll try bisecting to see where this was introduced. I think this is a regression between 0.22 and 0.23.2. |
Bisect shows that the breaking commit is 3e727b1. Assigning to @oquenchil to triage further. |
This is a release blocker for #6968. |
This has an easy fix. I will send it on Monday. |
Thanks! |
objc_libraries used to always take the static libraries of C++ dependencies even if dynamic libraries were available. This is because support for dynamic linking of C++ dependencies hasn't been added to objective-C rules yet. With 3e727b1#diff-033df3f3a834149658486b8a5754baefL438, we started propagating both static libraries and dynamic libraries in the new implementation of LibraryToLink. Since cc_test by default will always try to link dynamically, the behavior changed and if we had the dependency chain cc_test -> objc_library -> cc_library; the cc_test would start using the .so file from the cc_library, whereas before it used the .a file. Linking the .so file gives an error since as mentioned, support for this hasn't been added to Objective-C. The fix has been to nullify the dynamic library fields of LibraryToLink as long as a static library was present. This makes the behavior the same as before. RELNOTES:none PiperOrigin-RevId: 239226003
Fix is in and will be cherrypicked to release 0.24.0 (#6968). |
objc_libraries used to always take the static libraries of C++ dependencies even if dynamic libraries were available. This is because support for dynamic linking of C++ dependencies hasn't been added to objective-C rules yet. With 3e727b1#diff-033df3f3a834149658486b8a5754baefL438, we started propagating both static libraries and dynamic libraries in the new implementation of LibraryToLink. Since cc_test by default will always try to link dynamically, the behavior changed and if we had the dependency chain cc_test -> objc_library -> cc_library; the cc_test would start using the .so file from the cc_library, whereas before it used the .a file. Linking the .so file gives an error since as mentioned, support for this hasn't been added to Objective-C. The fix has been to nullify the dynamic library fields of LibraryToLink as long as a static library was present. This makes the behavior the same as before. RELNOTES:none PiperOrigin-RevId: 239226003
Baseline: 235e76b Cherry picks: + badd82e: Automated rollback of commit 1b4c37c. + 33e5719: Fix the Python version select() mechanism to handle PY3-as-default + 56366ee: Set non-empty values for msvc_env_* when VC not installed + 22b3fbf: Windows, test wrapper: fix broken integration test + f14d447: Add whitelist file for starlark transitions + d99bc47: Update BUILD + 3529ad7: Rename tools/function_transition_whitelist/BUILD to tools/whitelists/function_transition_whitelist/BUILD + de0612a: Update bazel_toolchains to latest release and add toolchain config target for BuildKite CI (rbe_ubuntu1604) + 3e660ad: Automated rollback of commit 0877340. + 314cf1f: Pass -undefined dynamic_lookup to dynamic library linking actions on Mac + fc586a8: Move cc_flags target into @bazel_tools//tools/cpp. + ea1703b: C++: Fix crash reported in #7721 + 803801d: Pass execution info to xml generating spawn. Fixes #7794 Incompatible changes: - Added --incompatible_py3_is_default to test switching the default Python version to PY3 for py_binary/py_test targets that do not specify a version. See #7359. - //tools/cmd_line_differ has been renamed to //tools/aquery_differ & can now compare (in addition to command lines) inputs of actions given 2 aquery results. - java_(mutable_|)proto_library: removed strict_deps attribute. - The flag --incompatible_list_based_execution_strategy_selection was added and is used to ease the migration to the new style of specifying execution strategy selection and fallback behavior. The documentation for this flag is here: #7480 - Added --incompatible_py2_outputs_are_suffixed, for switching the bazel-bin symlink to point to Python 3 outputs instead of Python 2 outputs. See [#7593](#7593). New features: - Make actions.args() object chainable. - Added --incompatible_windows_style_arg_escaping flag: enables correct subprocess argument escaping on Windows. (No-op on other platforms.) - Added --incompatible_windows_escape_jvm_flags flag: enables correct java_binary.jvm_flags and java_test.jvm_flags tokenization and escaping on Windows. (No-op on other platforms.) Important changes: - Allow running aquery against the current state of Skyframe - Added support for the "navigation" resource directory to Android resource processing in Bazel. This is used by the Navigation Architecture Component. - --incompatible_disable_runtimes_filegroups was flipped (#6942) - Incompatible flag `--incompatible_linkopts_in_user_link_flags` has been flipped (#6826) - Incompatible flag `--incompatible_dont_emit_static_libgcc` has been flipped (#6825) - --incompatible_disallow_filetype is enabled by default. - Fixed issue where exceptions and stacktraces were silently swallowed in the Android resource processing pipeline. - `--incompatible_disable_expand_if_all_available_in_flag_set` has been flipped (#7008) - --incompatible_disallow_dict_plus is enabled by default - Adds --incompatible_disable_objc_library_resources to disable resource attributes in objc_library. Please migrate these attributes to `data` instead. - --incompatible_disallow_old_style_args_add is enabled by default. - Using the `native` module in BUILD files is deprecated. It will be forbidden with --incompatible_disallow_native_in_build_file. - (Python rules) PyRuntimeInfo is exposed to Starlark, making it possible for Starlark rules to depend on or imitate `py_runtime`. The `files` attribute of `py_runtime` is no longer mandatory. - incompatible_use_toolchain_providers_in_java_common: pass JavaToolchainInfo and JavaRuntimeInfo providers to java_common APIs instead of configured targetshttps://github.com//issues/7186. - is_using_fission crosstool variable is now exposed in all compile actions when fission is active (it used to be exposed only for linking actions). - incompatible_use_toolchain_providers_in_java_common: pass JavaToolchainInfo and JavaRuntimeInfo providers to java_common APIs instead of configured targetshttps://github.com//issues/7186. - `py_runtime` gains a `python_version` attribute for specifying whether it represents a Python 2 or 3 interpreter. - `--incompatible_java_coverage` is enabled by default. - Starlark rules can safely declare attributes named "licenses" - When using --incompatible_list_based_execution_strategy_selection, Bazel will use remote execution by default (if you specify --remote_executor), otherwise persistent workers (if the action supports it), otherwise sandboxed local execution (if the action and platform supports it) and at last unsandboxed local execution. The flags --spawn_strategy and --strategy continue to work as before - this only sets new defaults for the case where you don't specify these flags. - Set default value of --incompatible_remap_main_repo to true. - Set default value of --incompatible_remap_main_repo to true. This release contains contributions from many people at Google, as well as Andrew Suffield, Brandon Lico, Chris Eason, Clint Harrison, Ed Schouten, Garrett Hopper, George Gensure, Greg, John Millikin, Julie, Keith Smiley, Laurent Le Brun, Ryan Beasley, Shmuel H, Travis Cline, Vladimir Chebotarev.
Baseline: 235e76b Cherry picks: + badd82e: Automated rollback of commit 1b4c37c. + 33e5719: Fix the Python version select() mechanism to handle PY3-as-default + 56366ee: Set non-empty values for msvc_env_* when VC not installed + 22b3fbf: Windows, test wrapper: fix broken integration test + f14d447: Add whitelist file for starlark transitions + d99bc47: Update BUILD + 3529ad7: Rename tools/function_transition_whitelist/BUILD to tools/whitelists/function_transition_whitelist/BUILD + de0612a: Update bazel_toolchains to latest release and add toolchain config target for BuildKite CI (rbe_ubuntu1604) + 3e660ad: Automated rollback of commit 0877340. + 314cf1f: Pass -undefined dynamic_lookup to dynamic library linking actions on Mac + fc586a8: Move cc_flags target into @bazel_tools//tools/cpp. + ea1703b: C++: Fix crash reported in #7721 + 803801d: Pass execution info to xml generating spawn. Fixes #7794 Incompatible changes: - Added --incompatible_py3_is_default to test switching the default Python version to PY3 for py_binary/py_test targets that do not specify a version. See #7359. - //tools/cmd_line_differ has been renamed to //tools/aquery_differ & can now compare (in addition to command lines) inputs of actions given 2 aquery results. - java_(mutable_|)proto_library: removed strict_deps attribute. - The flag --incompatible_list_based_execution_strategy_selection was added and is used to ease the migration to the new style of specifying execution strategy selection and fallback behavior. The documentation for this flag is here: #7480 - Added --incompatible_py2_outputs_are_suffixed, for switching the bazel-bin symlink to point to Python 3 outputs instead of Python 2 outputs. See [#7593](#7593). New features: - Make actions.args() object chainable. - Added --incompatible_windows_style_arg_escaping flag: enables correct subprocess argument escaping on Windows. (No-op on other platforms.) - Added --incompatible_windows_escape_jvm_flags flag: enables correct java_binary.jvm_flags and java_test.jvm_flags tokenization and escaping on Windows. (No-op on other platforms.) Important changes: - Allow running aquery against the current state of Skyframe - Added support for the "navigation" resource directory to Android resource processing in Bazel. This is used by the Navigation Architecture Component. - --incompatible_disable_runtimes_filegroups was flipped (#6942) - Incompatible flag `--incompatible_linkopts_in_user_link_flags` has been flipped (#6826) - Incompatible flag `--incompatible_dont_emit_static_libgcc` has been flipped (#6825) - --incompatible_disallow_filetype is enabled by default. - Fixed issue where exceptions and stacktraces were silently swallowed in the Android resource processing pipeline. - `--incompatible_disable_expand_if_all_available_in_flag_set` has been flipped (#7008) - --incompatible_disallow_dict_plus is enabled by default - Adds --incompatible_disable_objc_library_resources to disable resource attributes in objc_library. Please migrate these attributes to `data` instead. - --incompatible_disallow_old_style_args_add is enabled by default. - Using the `native` module in BUILD files is deprecated. It will be forbidden with --incompatible_disallow_native_in_build_file. - (Python rules) PyRuntimeInfo is exposed to Starlark, making it possible for Starlark rules to depend on or imitate `py_runtime`. The `files` attribute of `py_runtime` is no longer mandatory. - incompatible_use_toolchain_providers_in_java_common: pass JavaToolchainInfo and JavaRuntimeInfo providers to java_common APIs instead of configured targetshttps://github.com//issues/7186. - is_using_fission crosstool variable is now exposed in all compile actions when fission is active (it used to be exposed only for linking actions). - incompatible_use_toolchain_providers_in_java_common: pass JavaToolchainInfo and JavaRuntimeInfo providers to java_common APIs instead of configured targetshttps://github.com//issues/7186. - `py_runtime` gains a `python_version` attribute for specifying whether it represents a Python 2 or 3 interpreter. - `--incompatible_java_coverage` is enabled by default. - Starlark rules can safely declare attributes named "licenses" - When using --incompatible_list_based_execution_strategy_selection, Bazel will use remote execution by default (if you specify --remote_executor), otherwise persistent workers (if the action supports it), otherwise sandboxed local execution (if the action and platform supports it) and at last unsandboxed local execution. The flags --spawn_strategy and --strategy continue to work as before - this only sets new defaults for the case where you don't specify these flags. - Set default value of --incompatible_remap_main_repo to true. - Set default value of --incompatible_remap_main_repo to true. This release contains contributions from many people at Google, as well as Andrew Suffield, Brandon Lico, Chris Eason, Clint Harrison, Ed Schouten, Garrett Hopper, George Gensure, Greg, John Millikin, Julie, Keith Smiley, Laurent Le Brun, Ryan Beasley, Shmuel H, Travis Cline, Vladimir Chebotarev.
Baseline: 235e76b Cherry picks: + badd82e: Automated rollback of commit 1b4c37c. + 33e5719: Fix the Python version select() mechanism to handle PY3-as-default + 56366ee: Set non-empty values for msvc_env_* when VC not installed + 22b3fbf: Windows, test wrapper: fix broken integration test + f14d447: Add whitelist file for starlark transitions + d99bc47: Update BUILD + 3529ad7: Rename tools/function_transition_whitelist/BUILD to tools/whitelists/function_transition_whitelist/BUILD + de0612a: Update bazel_toolchains to latest release and add toolchain config target for BuildKite CI (rbe_ubuntu1604) + 3e660ad: Automated rollback of commit 0877340. + 314cf1f: Pass -undefined dynamic_lookup to dynamic library linking actions on Mac + fc586a8: Move cc_flags target into @bazel_tools//tools/cpp. + ea1703b: C++: Fix crash reported in #7721 + 803801d: Pass execution info to xml generating spawn. Fixes #7794 + f092ec3: Release 0.24.0 (2019-03-26) + c56c489: Wrap StatusRuntimeExceptions from GrpcRemoteCache Baseline: f092ec3 Cherrypicks: + c56c489: Wrap StatusRuntimeExceptions from GrpcRemoteCache
Baseline: 235e76b Cherry picks: + badd82e: Automated rollback of commit 1b4c37c. + 33e5719: Fix the Python version select() mechanism to handle PY3-as-default + 56366ee: Set non-empty values for msvc_env_* when VC not installed + 22b3fbf: Windows, test wrapper: fix broken integration test + f14d447: Add whitelist file for starlark transitions + d99bc47: Update BUILD + 3529ad7: Rename tools/function_transition_whitelist/BUILD to tools/whitelists/function_transition_whitelist/BUILD + de0612a: Update bazel_toolchains to latest release and add toolchain config target for BuildKite CI (rbe_ubuntu1604) + 3e660ad: Automated rollback of commit 0877340. + 314cf1f: Pass -undefined dynamic_lookup to dynamic library linking actions on Mac + fc586a8: Move cc_flags target into @bazel_tools//tools/cpp. + ea1703b: C++: Fix crash reported in bazelbuild#7721 + 803801d: Pass execution info to xml generating spawn. Fixes bazelbuild#7794 + f092ec3: Release 0.24.0 (2019-03-26) + c56c489: Wrap StatusRuntimeExceptions from GrpcRemoteCache Baseline: f092ec3 Cherrypicks: + c56c489: Wrap StatusRuntimeExceptions from GrpcRemoteCache
Bugs: what's the simplest, easiest way to reproduce this bug? Please provide a minimal example if possible.
When using this build file:
And running:
Bazel will NPE with the following stack trace:
What operating system are you running Bazel on?
macOS
What's the output of
bazel info release
?The text was updated successfully, but these errors were encountered: