bazelbuild / bazel

a fast, scalable, multi-language and extensible build system
https://bazel.build
Apache License 2.0
22.98k stars 4.03k forks source link

Hard crash due to ClassCastException when running buggy custom rule #14656

Closed endobson closed 1 month ago

endobson commented 2 years ago

Description of the problem / feature request:

Bazel crashes with an internal error if an Args object is passed to ctx.actions.run_shell, as it is expecting a sequence (possibly including Args objects). This should not be an internal error and instead a user facing error explaining the type discrepency.

Bugs: what's the simplest, easiest way to reproduce this bug? Please provide a minimal example if possible.

Code: https://github.com/endobson/examples/tree/bazel-args-hard-crash Command: bazel build //:foo

Snippet:

def _my_rule_impl(ctx):
  out_file = ctx.actions.declare_file(ctx.label.name)

  args = ctx.actions.args()

  ctx.actions.run_shell(
    outputs = [out_file],
    arguments = args,
    command = 'echo "foo" > %s'
      % (out_file.path),
  )

  return [DefaultInfo(files=depset([out_file]))]

Output

endobson@valhalla () ~/proj/examples % ~/proj/bazel/bazel-bin/src/bazel build //:foo
Starting local Bazel server and connecting to it...
INFO: Invocation ID: 1d5b23ca-fee4-43c1-8cec-87cecd4c598b
Analyzing: target //:foo (1 packages loaded, 0 targets configured)
FATAL: bazel crashed due to an internal error. Printing stack trace:
java.lang.RuntimeException: Unrecoverable error while evaluating node 'ConfiguredTargetKey{label=//:foo, config=BuildConfigurationValue.Key[a74d64c8f35811db03ff4e13b8b8f9b2ecdefb27b5e5b6727f565b576d3d56af]}' (requested by nodes )
        at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:563)
        at com.google.devtools.build.lib.concurrent.AbstractQueueVisitor$WrappedRunnable.run(AbstractQueueVisitor.java:398)
        at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Caused by: net.starlark.java.eval.Starlark$UncheckedEvalException: java.lang.ClassCastException: class com.google.devtools.build.lib.analysis.starlark.Args$MutableArgs cannot be cast to class net.starlark.java.eval.Sequence (com.google.devtools.build.lib.analysis.starlark.Args$MutableArgs and net.starlark.java.eval.Sequence are in unnamed module of loader 'app') (Starlark stack: [_my_rule_impl@/Users/endobson/proj/examples/rules.bzl:6:24, run_shell@<builtin>])
        at net.starlark.java.eval.Starlark.fastcall(Starlark.java:621)
        at net.starlark.java.eval.Eval.evalCall(Eval.java:674)
        at net.starlark.java.eval.Eval.eval(Eval.java:490)
        at net.starlark.java.eval.Eval.exec(Eval.java:272)
        at net.starlark.java.eval.Eval.execStatements(Eval.java:82)
        at net.starlark.java.eval.Eval.execFunctionBody(Eval.java:66)
        at net.starlark.java.eval.StarlarkFunction.fastcall(StarlarkFunction.java:191)
        at net.starlark.java.eval.Starlark.fastcall(Starlark.java:617)
        at com.google.devtools.build.lib.analysis.starlark.StarlarkRuleConfiguredTargetUtil.buildRule(StarlarkRuleConfiguredTargetUtil.java:107)
        at com.google.devtools.build.lib.analysis.ConfiguredTargetFactory.createRule(ConfiguredTargetFactory.java:366)
        at com.google.devtools.build.lib.analysis.ConfiguredTargetFactory.createConfiguredTarget(ConfiguredTargetFactory.java:190)
        at com.google.devtools.build.lib.skyframe.SkyframeBuildView.createConfiguredTarget(SkyframeBuildView.java:942)
        at com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.createConfiguredTarget(ConfiguredTargetFunction.java:1002)
        at com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.compute(ConfiguredTargetFunction.java:367)
        at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:477)
        ... 7 more
Caused by: java.lang.ClassCastException: class com.google.devtools.build.lib.analysis.starlark.Args$MutableArgs cannot be cast to class net.starlark.java.eval.Sequence (com.google.devtools.build.lib.analysis.starlark.Args$MutableArgs and net.starlark.java.eval.Sequence are in unnamed module of loader 'app')
        at com.google.devtools.build.lib.analysis.starlark.StarlarkActionFactory.runShell(StarlarkActionFactory.java:432)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at net.starlark.java.eval.MethodDescriptor.call(MethodDescriptor.java:162)
        at net.starlark.java.eval.BuiltinFunction.fastcall(BuiltinFunction.java:77)
        at net.starlark.java.eval.Starlark.fastcall(Starlark.java:617)
        ... 21 more

What operating system are you running Bazel on?

macOS 10.15.7

What's the output of bazel info release?

development version

If bazel info release returns "development version" or "(@non-git)", tell us how you built Bazel.

Checked out bazel repo and ran bazel build //src:bazel

What's the output of git remote get-url origin ; git rev-parse master ; git rev-parse HEAD ?

git@github.com:bazelbuild/bazel.git
58c0120c30df8f79d0455f73756008fa138bd8ad
58c0120c30df8f79d0455f73756008fa138bd8ad
github-actions[bot] commented 4 months ago

Thank you for contributing to the Bazel repository! This issue has been marked as stale since it has not had any activity in the last 1+ years. It will be closed in the next 90 days unless any other activity occurs. If you think this issue is still relevant and should stay open, please post any comment here and the issue will no longer be marked as stale.

github-actions[bot] commented 1 month ago

This issue has been automatically closed due to inactivity. If you're still interested in pursuing this, please post @bazelbuild/triage in a comment here and we'll take a look. Thanks!