topdown/eval: conflict errors in functions when output not captured (#3920)

With func1.rego as

    package test
    r(x) {
      data.test.q(x)
    }
    q(_) = true
    q(_) = false

Before:

    $ opa eval -fpretty -d func1.rego 'data.test.r(1)'
    true

After:

    $ opa eval -fpretty -d func1.rego 'data.test.r(1)'
    1 error occurred: func1.rego:12: eval_conflict_error: functions must not produce multiple outputs for same inputs

Fixes #3912.

Also adds a CHANGELOG item making the backwards-compat-breaking change
prominent, and sharing an example of how to fix it.

Signed-off-by: Stephan Renatus <stephan.renatus@gmail.com>
This commit is contained in:
Stephan Renatus
2021-10-27 10:46:33 +02:00
committed by GitHub
parent 5263d63271
commit dc2019de57
3 changed files with 68 additions and 0 deletions
@@ -15,3 +15,18 @@ cases:
query: data.test1.r = x
want_error: functions must not produce multiple outputs for same inputs
want_error_code: eval_conflict_error
- data:
modules:
- |
package test
f(_) = true
f(_) = false
r {
data.test.f(1)
}
note: functionerrors/function output conflict, used as boolean
query: data.test.r = x
want_error: functions must not produce multiple outputs for same inputs
want_error_code: eval_conflict_error