From 77c6be036bc954ebc879b04b749f69e4893d24c4 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Wed, 28 Sep 2022 04:46:31 +0200 Subject: [PATCH] Add example for dead code elimination for JSX v4. DCE does not seem to be working: probably JSC call does not use proper location for the make function. --- .../examples/deadcode/expected/deadcode.txt | 17 ++++++++++++++++- .../examples/deadcode/src/JsxV4.bs.js | 18 ++++++++++++++++++ .../reanalyze/examples/deadcode/src/JsxV4.res | 7 +++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 analysis/reanalyze/examples/deadcode/src/JsxV4.bs.js create mode 100644 analysis/reanalyze/examples/deadcode/src/JsxV4.res diff --git a/analysis/reanalyze/examples/deadcode/expected/deadcode.txt b/analysis/reanalyze/examples/deadcode/expected/deadcode.txt index e14064bc7..c7ff7fc55 100644 --- a/analysis/reanalyze/examples/deadcode/expected/deadcode.txt +++ b/analysis/reanalyze/examples/deadcode/expected/deadcode.txt @@ -1101,6 +1101,9 @@ addRecordLabelDeclaration text ImportMyBanner.res:5:16 path:+ImportMyBanner.message addValueReference ImportMyBanner.res:12:4 --> ImportMyBanner.res:7:0 Scanning JSResource.cmt Source:JSResource.res + Scanning JsxV4.cmt Source:JsxV4.res + addValueDeclaration +make JsxV4.res:4:23 path:+JsxV4.C + addValueReference JsxV4.res:4:36 --> React.res:3:0 Scanning LetPrivate.cmt Source:LetPrivate.res addValueDeclaration +y LetPrivate.res:7:4 path:+LetPrivate addValueDeclaration +x LetPrivate.res:3:6 path:+LetPrivate.local_1 @@ -1887,6 +1890,7 @@ File References ImportJsValue.res -->> ImportMyBanner.res -->> JSResource.res -->> + JsxV4.res -->> React.res LetPrivate.res -->> ModuleAliases.res -->> ModuleAliases2.res -->> @@ -2121,6 +2125,7 @@ File References Dead Value +ImportMyBanner.+make: 0 references () [0] Live Value +ImportMyBanner.+make: 0 references () [0] Dead RecordLabel +ImportMyBanner.message.text: 0 references () [0] + Dead Value +JsxV4.C.+make: 0 references () [0] Live Value +LetPrivate.+y: 0 references () [0] Live Value +LetPrivate.local_1.+x: 1 references (LetPrivate.res:7:4) [0] Live Value +ModuleAliases.+testInner2: 0 references () [0] @@ -3981,6 +3986,16 @@ File References <-- line 12 @dead("make") let make = make + Warning Dead Module + File "JsxV4.res", line 3, characters 8-62 + JsxV4.C is a dead module as all its items are dead. + + Warning Dead Value + File "JsxV4.res", line 4, characters 20-47 + C.make is never used + <-- line 4 + @react.component @dead("C.make") let make = () => React.null + Warning Dead Module File "ModuleAliases.res", line 2, characters 10-57 ModuleAliases.Outer.Inner is a dead module as all its items are dead. @@ -4505,4 +4520,4 @@ File References <-- line 96 type variant1Object = | @dead("variant1Object.R") R(payload) - Analysis reported 334 issues (Incorrect Dead Annotation:1, Warning Dead Exception:2, Warning Dead Module:25, Warning Dead Type:89, Warning Dead Value:199, Warning Dead Value With Side Effects:2, Warning Redundant Optional Argument:5, Warning Unused Argument:11) + Analysis reported 336 issues (Incorrect Dead Annotation:1, Warning Dead Exception:2, Warning Dead Module:26, Warning Dead Type:89, Warning Dead Value:200, Warning Dead Value With Side Effects:2, Warning Redundant Optional Argument:5, Warning Unused Argument:11) diff --git a/analysis/reanalyze/examples/deadcode/src/JsxV4.bs.js b/analysis/reanalyze/examples/deadcode/src/JsxV4.bs.js new file mode 100644 index 000000000..c4f62837d --- /dev/null +++ b/analysis/reanalyze/examples/deadcode/src/JsxV4.bs.js @@ -0,0 +1,18 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE + +import * as React from "react"; + +function JsxV4$C(props) { + return null; +} + +var C = { + make: JsxV4$C +}; + +React.createElement(JsxV4$C, {}); + +export { + C , +} +/* Not a pure module */ diff --git a/analysis/reanalyze/examples/deadcode/src/JsxV4.res b/analysis/reanalyze/examples/deadcode/src/JsxV4.res new file mode 100644 index 000000000..e9edcb20e --- /dev/null +++ b/analysis/reanalyze/examples/deadcode/src/JsxV4.res @@ -0,0 +1,7 @@ +@@jsxConfig({version: 4}) + +module C = { + @react.component let make = () => React.null +} + +let _ =