Regression with core.async surrounding select-keys / find on String

Description

Good behavior:

$ clj -Srepro -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.339"} org.clojure/core.async {:mvn/version "0.4.490"}}}' -m cljs.main ClojureScript 1.10.339 cljs.user=> (require '[clojure.core.async :refer [go]] '[clojure.test :refer [is]]) cljs.user=> (go (let [foo "abc"] (is (= #{foo})))) #object[cljs.core.async.impl.channels.ManyToManyChannel]

Regression with 1.10.439:

$ clj -Srepro -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.439"} org.clojure/core.async {:mvn/version "0.4.490"}}}' -m cljs.main ClojureScript 1.10.439 cljs.user=> (require '[clojure.core.async :refer [go]] '[clojure.test :refer [is]]) nil cljs.user=> (go (let [foo "abc"] (is (= #{foo})))) clojure.lang.ExceptionInfo: find not supported on type: java.lang.String at line 1 <cljs repl> {:file "<cljs repl>", :line 1, :column 1, :root-source-info {:source-type :fragment, :source-form (go (let [foo "abc"] (is (= #{foo}))))}, :tag :cljs/analysis-error} at cljs.analyzer$error.invokeStatic(analyzer.cljc:718) at cljs.analyzer$error.invoke(analyzer.cljc:714) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3877) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3873) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3871) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.core$hash_set$fn__4415.invoke(core.cljc:2563) at clojure.core$map$fn__5851.invoke(core.clj:2755) at clojure.lang.LazySeq.sval(LazySeq.java:42) at clojure.lang.LazySeq.seq(LazySeq.java:51) at clojure.lang.RT.seq(RT.java:531) at clojure.core$seq__5387.invokeStatic(core.clj:137) at clojure.core$every_QMARK_.invokeStatic(core.clj:2679) at clojure.core$every_QMARK_.invoke(core.clj:2672) at cljs.core$hash_set.invokeStatic(core.cljc:2562) at cljs.core$hash_set.doInvoke(core.cljc:2558) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:669) at clojure.core$apply.invoke(core.clj:660) at cljs.analyzer$macroexpand_1_STAR_$fn__2361.invoke(analyzer.cljc:3547) at cljs.analyzer$macroexpand_1_STAR_.invokeStatic(analyzer.cljc:3546) at cljs.analyzer$macroexpand_1_STAR_.invoke(analyzer.cljc:3533) at cljs.analyzer$macroexpand_1.invokeStatic(analyzer.cljc:3594) at cljs.analyzer$macroexpand_1.invoke(analyzer.cljc:3590) at cljs.core.async.impl.ioc_macros$expand.invokeStatic(ioc_macros.clj:670) at cljs.core.async.impl.ioc_macros$expand.invoke(ioc_macros.clj:660) at cljs.core.async.impl.ioc_macros$eval2097$fn__2098$fn__2100.invoke(ioc_macros.clj:700) at cljs.core.async.impl.ioc_macros$all$fn__1021$fn__1023.invoke(ioc_macros.clj:112) at clojure.core.protocols$fn__8144.invokeStatic(protocols.clj:168) at clojure.core.protocols$fn__8144.invoke(protocols.clj:124) at clojure.core.protocols$fn__8099$G__8094__8108.invoke(protocols.clj:19) at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31) at clojure.core.protocols$fn__8131.invokeStatic(protocols.clj:75) at clojure.core.protocols$fn__8131.invoke(protocols.clj:75) at clojure.core.protocols$fn__8073$G__8068__8086.invoke(protocols.clj:13) at clojure.core$reduce.invokeStatic(core.clj:6828) at clojure.core$reduce.invoke(core.clj:6810) at cljs.core.async.impl.ioc_macros$all$fn__1021.invoke(ioc_macros.clj:110) at cljs.core.async.impl.ioc_macros$default_sexpr$fn__1587.invoke(ioc_macros.clj:410) at cljs.core.async.impl.ioc_macros$eval2097$fn__2098$fn__2100.invoke(ioc_macros.clj:696) at cljs.core.async.impl.ioc_macros$let_binding_to_ssa$fn__1601.invoke(ioc_macros.clj:417) at cljs.core.async.impl.ioc_macros$all$fn__1021$fn__1023.invoke(ioc_macros.clj:112) at clojure.core.protocols$fn__8144.invokeStatic(protocols.clj:168) at clojure.core.protocols$fn__8144.invoke(protocols.clj:124) at clojure.core.protocols$fn__8099$G__8094__8108.invoke(protocols.clj:19) at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31) at clojure.core.protocols$fn__8131.invokeStatic(protocols.clj:75) at clojure.core.protocols$fn__8131.invoke(protocols.clj:75) at clojure.core.protocols$fn__8073$G__8068__8086.invoke(protocols.clj:13) at clojure.core$reduce.invokeStatic(core.clj:6828) at clojure.core$reduce.invoke(core.clj:6810) at cljs.core.async.impl.ioc_macros$all$fn__1021.invoke(ioc_macros.clj:110) at cljs.core.async.impl.ioc_macros$eval1610$fn__1612$fn__1617.invoke(ioc_macros.clj:425) at cljs.core.async.impl.ioc_macros$eval2097$fn__2098$fn__2100.invoke(ioc_macros.clj:696) at cljs.core.async.impl.ioc_macros$all$fn__1021$fn__1023.invoke(ioc_macros.clj:112) at clojure.core.protocols$fn__8144.invokeStatic(protocols.clj:168) at clojure.core.protocols$fn__8144.invoke(protocols.clj:124) at clojure.core.protocols$fn__8099$G__8094__8108.invoke(protocols.clj:19) at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31) at clojure.core.protocols$fn__8131.invokeStatic(protocols.clj:75) at clojure.core.protocols$fn__8131.invoke(protocols.clj:75) at clojure.core.protocols$fn__8073$G__8068__8086.invoke(protocols.clj:13) at clojure.core$reduce.invokeStatic(core.clj:6828) at clojure.core$reduce.invoke(core.clj:6810) at cljs.core.async.impl.ioc_macros$all$fn__1021.invoke(ioc_macros.clj:110) at cljs.core.async.impl.ioc_macros$eval1859$fn__1861$fn__1869.invoke(ioc_macros.clj:563) at cljs.core.async.impl.ioc_macros$eval2097$fn__2098$fn__2100.invoke(ioc_macros.clj:696) at cljs.core.async.impl.ioc_macros$all$fn__1021$fn__1023.invoke(ioc_macros.clj:112) at clojure.core.protocols$fn__8144.invokeStatic(protocols.clj:168) at clojure.core.protocols$fn__8144.invoke(protocols.clj:124) at clojure.core.protocols$fn__8099$G__8094__8108.invoke(protocols.clj:19) at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31) at clojure.core.protocols$fn__8131.invokeStatic(protocols.clj:75) at clojure.core.protocols$fn__8131.invoke(protocols.clj:75) at clojure.core.protocols$fn__8073$G__8068__8086.invoke(protocols.clj:13) at clojure.core$reduce.invokeStatic(core.clj:6828) at clojure.core$reduce.invoke(core.clj:6810) at cljs.core.async.impl.ioc_macros$all$fn__1021.invoke(ioc_macros.clj:110) at cljs.core.async.impl.ioc_macros$eval1610$fn__1612$fn__1617.invoke(ioc_macros.clj:425) at cljs.core.async.impl.ioc_macros$eval2097$fn__2098$fn__2100.invoke(ioc_macros.clj:696) at cljs.core.async.impl.ioc_macros$all$fn__1021$fn__1023.invoke(ioc_macros.clj:112) at clojure.core.protocols$fn__8144.invokeStatic(protocols.clj:168) at clojure.core.protocols$fn__8144.invoke(protocols.clj:124) at clojure.core.protocols$fn__8099$G__8094__8108.invoke(protocols.clj:19) at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31) at clojure.core.protocols$fn__8131.invokeStatic(protocols.clj:75) at clojure.core.protocols$fn__8131.invoke(protocols.clj:75) at clojure.core.protocols$fn__8073$G__8068__8086.invoke(protocols.clj:13) at clojure.core$reduce.invokeStatic(core.clj:6828) at clojure.core$reduce.invoke(core.clj:6810) at cljs.core.async.impl.ioc_macros$all$fn__1021.invoke(ioc_macros.clj:110) at cljs.core.async.impl.ioc_macros$parse_to_state_machine$fn__2152.invoke(ioc_macros.clj:746) at cljs.core.async.impl.ioc_macros$get_plan.invokeStatic(ioc_macros.clj:70) at cljs.core.async.impl.ioc_macros$get_plan.invoke(ioc_macros.clj:67) at cljs.core.async.impl.ioc_macros$parse_to_state_machine.invokeStatic(ioc_macros.clj:746) at cljs.core.async.impl.ioc_macros$parse_to_state_machine.invoke(ioc_macros.clj:742) at cljs.core.async.impl.ioc_macros$state_machine.invokeStatic(ioc_macros.clj:881) at cljs.core.async.impl.ioc_macros$state_machine.invoke(ioc_macros.clj:880) at cljs.core.async$go.invokeStatic(async.clj:18) at cljs.core.async$go.doInvoke(async.clj:4) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:669) at clojure.core$apply.invoke(core.clj:660) at cljs.analyzer$macroexpand_1_STAR_$fn__2361.invoke(analyzer.cljc:3547) at cljs.analyzer$macroexpand_1_STAR_.invokeStatic(analyzer.cljc:3546) at cljs.analyzer$macroexpand_1_STAR_.invoke(analyzer.cljc:3533) at cljs.analyzer$macroexpand_1.invokeStatic(analyzer.cljc:3594) at cljs.analyzer$macroexpand_1.invoke(analyzer.cljc:3590) at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:3627) at cljs.analyzer$analyze_seq.invoke(analyzer.cljc:3607) at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3810) at cljs.analyzer$analyze_form.invoke(analyzer.cljc:3807) at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3860) at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:3851) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3880) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3873) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3871) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze_let_binding_init.invokeStatic(analyzer.cljc:2062) at cljs.analyzer$analyze_let_binding_init.invoke(analyzer.cljc:2060) at cljs.analyzer$analyze_let_bindings_STAR_.invokeStatic(analyzer.cljc:2082) at cljs.analyzer$analyze_let_bindings_STAR_.invoke(analyzer.cljc:2071) at cljs.analyzer$analyze_let_bindings.invokeStatic(analyzer.cljc:2114) at cljs.analyzer$analyze_let_bindings.invoke(analyzer.cljc:2113) at cljs.analyzer$analyze_let.invokeStatic(analyzer.cljc:2130) at cljs.analyzer$analyze_let.invoke(analyzer.cljc:2124) at cljs.analyzer$fn__1822.invokeStatic(analyzer.cljc:2150) at cljs.analyzer$fn__1822.invoke(analyzer.cljc:2148) at clojure.lang.MultiFn.invoke(MultiFn.java:252) at cljs.analyzer$analyze_seq_STAR_.invokeStatic(analyzer.cljc:3600) at cljs.analyzer$analyze_seq_STAR_.invoke(analyzer.cljc:3598) at cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:3605) at cljs.analyzer$analyze_seq_STAR__wrap.invoke(analyzer.cljc:3603) at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:3629) at cljs.analyzer$analyze_seq.invoke(analyzer.cljc:3607) at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3810) at cljs.analyzer$analyze_form.invoke(analyzer.cljc:3807) at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3860) at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:3851) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3880) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:3630) at cljs.analyzer$analyze_seq.invoke(analyzer.cljc:3607) at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3810) at cljs.analyzer$analyze_form.invoke(analyzer.cljc:3807) at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3860) at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:3851) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3880) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3873) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3871) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$parse_invoke_STAR_$ana_expr__2320.invoke(analyzer.cljc:3373) at clojure.core$mapv$fn__8430.invoke(core.clj:6912) at clojure.lang.PersistentList.reduce(PersistentList.java:141) at clojure.core$reduce.invokeStatic(core.clj:6827) at clojure.core$mapv.invokeStatic(core.clj:6903) at clojure.core$mapv.invoke(core.clj:6903) at cljs.analyzer$parse_invoke_STAR_.invokeStatic(analyzer.cljc:3374) at cljs.analyzer$parse_invoke_STAR_.invoke(analyzer.cljc:3322) at cljs.analyzer$parse_invoke.invokeStatic(analyzer.cljc:3380) at cljs.analyzer$parse_invoke.invoke(analyzer.cljc:3378) at cljs.analyzer$analyze_seq_STAR_.invokeStatic(analyzer.cljc:3601) at cljs.analyzer$analyze_seq_STAR_.invoke(analyzer.cljc:3598) at cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:3605) at cljs.analyzer$analyze_seq_STAR__wrap.invoke(analyzer.cljc:3603) at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:3629) at cljs.analyzer$analyze_seq.invoke(analyzer.cljc:3607) at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3810) at cljs.analyzer$analyze_form.invoke(analyzer.cljc:3807) at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3860) at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:3851) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3880) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3873) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3871) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$fn__1803.invokeStatic(analyzer.cljc:2041) at cljs.analyzer$fn__1803.invoke(analyzer.cljc:2037) at clojure.lang.MultiFn.invoke(MultiFn.java:252) at cljs.analyzer$analyze_seq_STAR_.invokeStatic(analyzer.cljc:3600) at cljs.analyzer$analyze_seq_STAR_.invoke(analyzer.cljc:3598) at cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:3605) at cljs.analyzer$analyze_seq_STAR__wrap.invoke(analyzer.cljc:3603) at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:3629) at cljs.analyzer$analyze_seq.invoke(analyzer.cljc:3607) at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3810) at cljs.analyzer$analyze_form.invoke(analyzer.cljc:3807) at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3860) at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:3851) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3880) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3873) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3871) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.analyzer$fn__1653$fn__1677.invoke(analyzer.cljc:1564) at cljs.analyzer$fn__1653.invokeStatic(analyzer.cljc:1564) at cljs.analyzer$fn__1653.invoke(analyzer.cljc:1511) at clojure.lang.MultiFn.invoke(MultiFn.java:252) at cljs.analyzer$analyze_seq_STAR_.invokeStatic(analyzer.cljc:3600) at cljs.analyzer$analyze_seq_STAR_.invoke(analyzer.cljc:3598) at cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:3605) at cljs.analyzer$analyze_seq_STAR__wrap.invoke(analyzer.cljc:3603) at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:3629) at cljs.analyzer$analyze_seq.invoke(analyzer.cljc:3607) at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3810) at cljs.analyzer$analyze_form.invoke(analyzer.cljc:3807) at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3860) at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:3851) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3880) at cljs.analyzer$analyze.invoke(analyzer.cljc:3863) at cljs.repl$evaluate_form$__GT_ast__6456.invoke(repl.cljc:517) at cljs.repl$evaluate_form.invokeStatic(repl.cljc:519) at cljs.repl$evaluate_form.invoke(repl.cljc:499) at cljs.repl$eval_cljs.invokeStatic(repl.cljc:689) at cljs.repl$eval_cljs.invoke(repl.cljc:682) at cljs.repl$repl_STAR_$read_eval_print__6641.invoke(repl.cljc:985) at cljs.repl$repl_STAR_$fn__6647$fn__6656.invoke(repl.cljc:1026) at cljs.repl$repl_STAR_$fn__6647.invoke(repl.cljc:1025) at cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1416) at cljs.compiler$with_core_cljs.invoke(compiler.cljc:1405) at cljs.repl$repl_STAR_.invokeStatic(repl.cljc:988) at cljs.repl$repl_STAR_.invoke(repl.cljc:861) at cljs.cli$repl_opt.invokeStatic(cli.clj:314) at cljs.cli$repl_opt.invoke(cli.clj:301) at cljs.cli$main.invokeStatic(cli.clj:648) at cljs.cli$main.doInvoke(cli.clj:635) at clojure.lang.RestFn.invoke(RestFn.java:410) at clojure.lang.AFn.applyToHelper(AFn.java:154) at clojure.lang.RestFn.applyTo(RestFn.java:132) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$apply.invoke(core.clj:660) at cljs.main$_main.invokeStatic(main.clj:61) at cljs.main$_main.doInvoke(main.clj:52) at clojure.lang.RestFn.invoke(RestFn.java:397) at clojure.lang.AFn.applyToHelper(AFn.java:152) at clojure.lang.RestFn.applyTo(RestFn.java:132) at clojure.lang.Var.applyTo(Var.java:705) at clojure.core$apply.invokeStatic(core.clj:665) at clojure.main$main_opt.invokeStatic(main.clj:491) at clojure.main$main_opt.invoke(main.clj:487) at clojure.main$main.invokeStatic(main.clj:598) at clojure.main$main.doInvoke(main.clj:561) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.lang.Var.applyTo(Var.java:705) at clojure.main.main(main.java:37) Caused by: java.lang.IllegalArgumentException: find not supported on type: java.lang.String at clojure.lang.RT.find(RT.java:866) at clojure.core$select_keys.invokeStatic(core.clj:1547) at clojure.core$select_keys.invoke(core.clj:1540) at cljs.analyzer$analyze_symbol.invokeStatic(analyzer.cljc:3427) at cljs.analyzer$analyze_symbol.invoke(analyzer.cljc:3409) at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3809) at cljs.analyzer$analyze_form.invoke(analyzer.cljc:3807) at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3860) at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:3851) at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3880) ... 250 more

Environment

None

Attachments

1
  • 03 Jan 2019, 08:48 PM

Activity

Show:

Antonin Hildebrand January 25, 2019 at 8:30 PM

I'm just playing with chromex project and the stackoveflow issue is there even without this patch applied. The problem is just intermittent.

With official v1.10.439 I'm able to introduce it on my machine by doing advanced compilation prior optimizations:none. I'm also able to avoid it by making the go block smaller.

To me it looks like this other issue:
https://github.com/binaryage/dirac/blob/f642f54e8a36d4cb1ebbcd7d93719af4d3c6b1b9/src/automation/dirac/automation.clj#L27-L31

; this macro exists solely to work around a bug in cljs compiler
; too many commands on single go-block level causes infinite compiler loop:
; https://gist.github.com/darwin/19552acb6f94887d641e878272a19f3c
; I believe this to be related to http://dev.clojure.org/jira/browse/CLJS-365
; I'm not sure what go macro does exactly, but it might generate an apply call which exceeds safe number of args

Thomas Heller January 8, 2019 at 3:58 PM

Should we not fix this issue in core.async rather than trying to work around it in CLJS?

Mike Fikes January 4, 2019 at 12:16 AM

CLJS-3030.patch fails in Canary for the chromex project

It appears to involve a stackoverflow in the analyzer:
https://travis-ci.org/binaryage/chromex/builds/475094526

It happens when analyzing this form: https://github.com/binaryage/chromex/blob/5d227259696304b7b8a5cdc8aea54c1ec5d68a1a/test/chromex/test/chrome_port.cljs#L34

Mike Fikes January 3, 2019 at 11:34 PM

CLJS-3030.patch passes CI

Completed

Details

Assignee

Reporter

Priority

Created January 3, 2019 at 6:20 PM
Updated January 25, 2019 at 9:33 PM
Resolved January 25, 2019 at 9:33 PM