From 0897cc8a0f51afb2576326bb2a91af15182e7c40 Mon Sep 17 00:00:00 2001 From: Sathya Gunasekaran Date: Tue, 20 Jun 2023 14:58:36 +0100 Subject: [PATCH] Add failing test for DropMemoCalls failing to DCE dep array Found this while running Forget on the React tests. This isn't a high priority because the ESLint plugin would've caught this. But it'd be nice if either our validation rules caught this or if our compiler did correctly eliminate the dep array. --- ...g.useMemo-deps-array-not-cleared.expect.md | 41 +++++++++++++++++++ .../bug.useMemo-deps-array-not-cleared.js | 9 ++++ 2 files changed, 50 insertions(+) create mode 100644 compiler/forget/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug.useMemo-deps-array-not-cleared.expect.md create mode 100644 compiler/forget/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug.useMemo-deps-array-not-cleared.js diff --git a/compiler/forget/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug.useMemo-deps-array-not-cleared.expect.md b/compiler/forget/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug.useMemo-deps-array-not-cleared.expect.md new file mode 100644 index 0000000000..10a05f4e40 --- /dev/null +++ b/compiler/forget/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug.useMemo-deps-array-not-cleared.expect.md @@ -0,0 +1,41 @@ + +## Input + +```javascript +function App({text, hasDeps}) { + const resolvedText = useMemo( + () => { + return text.toUpperCase(); + }, + hasDeps ? null : [text], // should be DCE'd + ); + return resolvedText; +} + +``` + +## Code + +```javascript +import { unstable_useMemoCache as useMemoCache } from "react"; +function App(t26) { + const $ = useMemoCache(2); + const { text, hasDeps } = t26; + + hasDeps ? null : [text]; + const c_0 = $[0] !== text; + let t0; + if (c_0) { + t0 = text.toUpperCase(); + $[0] = text; + $[1] = t0; + } else { + t0 = $[1]; + } + const t19 = t0; + const resolvedText = t19; + return resolvedText; +} + +``` + \ No newline at end of file diff --git a/compiler/forget/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug.useMemo-deps-array-not-cleared.js b/compiler/forget/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug.useMemo-deps-array-not-cleared.js new file mode 100644 index 0000000000..711783d4f9 --- /dev/null +++ b/compiler/forget/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/bug.useMemo-deps-array-not-cleared.js @@ -0,0 +1,9 @@ +function App({ text, hasDeps }) { + const resolvedText = useMemo( + () => { + return text.toUpperCase(); + }, + hasDeps ? null : [text] // should be DCE'd + ); + return resolvedText; +}