Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup retains classes mentioned in fallthru after throw #4542

Closed
lambdageek opened this issue Jun 30, 2022 · 2 comments · Fixed by #4573
Closed

Rollup retains classes mentioned in fallthru after throw #4542

lambdageek opened this issue Jun 30, 2022 · 2 comments · Fixed by #4573

Comments

@lambdageek
Copy link

lambdageek commented Jun 30, 2022

Rollup Version

2.75.7

Operating System (or Browser)

Chrome

Node Version (if applicable)

No response

Link To Reproduction

https://rollupjs.org/repl/?version=2.75.7&shareable=JTdCJTIybW9kdWxlcyUyMiUzQSU1QiU3QiUyMm5hbWUlMjIlM0ElMjJtYWluLmpzJTIyJTJDJTIyY29kZSUyMiUzQSUyMiUyRiolMjBUUkVFLVNIQUtJTkclMjAqJTJGJTVDbmltcG9ydCUyMCU3QiUyMG1ha2VDJTIwJTdEJTIwZnJvbSUyMCcuJTJGbWF0aHMuanMnJTNCJTVDbiU1Q25jb25zb2xlLmxvZyglMjBtYWtlQyglMjAlNUMlMjJhYmMlNUMlMjIlMjApLm15U3RyaW5nJTIwKSUzQiUyMCUyMiUyQyUyMmlzRW50cnklMjIlM0F0cnVlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMm1hdGhzLmpzJTIyJTJDJTIyY29kZSUyMiUzQSUyMiUyRiUyRiUyMG1hdGhzLmpzJTVDbiU1Q25jb25zdCUyMGNvbmRpdGlvbiUyMCUzRCUyMGZhbHNlJTNCJTVDbiU1Q25jbGFzcyUyMEMlMjAlN0IlNUNuJTIwJTIwY29uc3RydWN0b3IocyklMjAlN0IlNUNuJTVDdCU1Q3R0aGlzLm15U3RyaW5nJTIwJTNEJTIwcyUzQiU1Q24lNUN0JTdEJTVDbiU3RCU1Q24lNUNuJTJGJTJGJTIwVGhpcyUyMGZ1bmN0aW9uJTIwZ2V0cyUyMGluY2x1ZGVkJTVDbmV4cG9ydCUyMGZ1bmN0aW9uJTIwbWFrZUMlMjAoJTIwcyUyMCklMjAlN0IlNUNuJTVDdGlmJTIwKCFjb25kaXRpb24pJTIwJTdCJTVDbiU1Q3QlNUN0dGhyb3clMjBuZXclMjBFcnJvciUyMCglNUMlMjJjb25kaXRpb24lMjBpcyUyMGZhbHNlJTVDJTIyKSUzQiU1Q24lNUN0JTdEJTVDbiU1Q3QlMkYlMkYlMjBlbHNlJTIwJTJGJTJGJTIwdW5jb21tZW50JTIwdGhpcyUyMCdlbHNlJyUyMGFuZCUyMEMlMjBpcyUyMG5vdCUyMHJldGFpbmVkJTVDbiU1Q3RyZXR1cm4lMjBuZXclMjBDKHMpJTNCJTVDbiU3RCUyMiUyQyUyMmlzRW50cnklMjIlM0FmYWxzZSU3RCU1RCUyQyUyMm9wdGlvbnMlMjIlM0ElN0IlMjJmb3JtYXQlMjIlM0ElMjJpaWZlJTIyJTJDJTIybmFtZSUyMiUzQSUyMm15QnVuZGxlJTIyJTJDJTIyYW1kJTIyJTNBJTdCJTIyaWQlMjIlM0ElMjIlMjIlN0QlMkMlMjJnbG9iYWxzJTIyJTNBJTdCJTdEJTdEJTJDJTIyZXhhbXBsZSUyMiUzQW51bGwlN0Q=

Expected Behaviour

In a module like this:

const condition = false;

class C {
	constructor(s) {
		this.myString = s;
	}
}

// This function gets included
export function makeC ( s ) {
	if (!condition) {
		throw new Error ("condition is false");
	}
	// else // uncomment this 'else' and C is not retained
	return new C(s);
}

I would expect that the result of tree shaking would not retain the definition of C because it is only used in the fallthru case after a throw.

Indeed that's how it works if the new C is in an else branch. the defintion of C is dropped.

Actual Behaviour

the call to new C is gone, but the definition of C is still present

	// maths.js

	class C {
		constructor(s) {
			this.myString = s;
		}
	}

	// This function gets included
	function makeC ( s ) {
		{
			throw new Error ("condition is false");
		}
	}
@lukastaegert
Copy link
Member

Turns out we were unnecessarily including return expressions of all used functions even if the return was never reached. Fix at #4573

@lukastaegert
Copy link
Member

This is your example via #4573: https://rollupjs.org/repl/?pr=4573&shareable=JTdCJTIybW9kdWxlcyUyMiUzQSU1QiU3QiUyMm5hbWUlMjIlM0ElMjJtYWluLmpzJTIyJTJDJTIyY29kZSUyMiUzQSUyMiUyRiolMjBUUkVFLVNIQUtJTkclMjAqJTJGJTVDbmltcG9ydCUyMCU3QiUyMG1ha2VDJTIwJTdEJTIwZnJvbSUyMCcuJTJGbWF0aHMuanMnJTNCJTVDbiU1Q25jb25zb2xlLmxvZyglMjBtYWtlQyglMjAlNUMlMjJhYmMlNUMlMjIlMjApLm15U3RyaW5nJTIwKSUzQiUyMCUyMiUyQyUyMmlzRW50cnklMjIlM0F0cnVlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMm1hdGhzLmpzJTIyJTJDJTIyY29kZSUyMiUzQSUyMiUyRiUyRiUyMG1hdGhzLmpzJTVDbiU1Q25jb25zdCUyMGNvbmRpdGlvbiUyMCUzRCUyMGZhbHNlJTNCJTVDbiU1Q25jbGFzcyUyMEMlMjAlN0IlNUNuJTIwJTIwY29uc3RydWN0b3IocyklMjAlN0IlNUNuJTVDdCU1Q3R0aGlzLm15U3RyaW5nJTIwJTNEJTIwcyUzQiU1Q24lNUN0JTdEJTVDbiU3RCU1Q24lNUNuJTJGJTJGJTIwVGhpcyUyMGZ1bmN0aW9uJTIwZ2V0cyUyMGluY2x1ZGVkJTVDbmV4cG9ydCUyMGZ1bmN0aW9uJTIwbWFrZUMlMjAoJTIwcyUyMCklMjAlN0IlNUNuJTVDdGlmJTIwKCFjb25kaXRpb24pJTIwJTdCJTVDbiU1Q3QlNUN0dGhyb3clMjBuZXclMjBFcnJvciUyMCglNUMlMjJjb25kaXRpb24lMjBpcyUyMGZhbHNlJTVDJTIyKSUzQiU1Q24lNUN0JTdEJTVDbiU1Q3QlMkYlMkYlMjBlbHNlJTIwJTJGJTJGJTIwdW5jb21tZW50JTIwdGhpcyUyMCdlbHNlJyUyMGFuZCUyMEMlMjBpcyUyMG5vdCUyMHJldGFpbmVkJTVDbiU1Q3RyZXR1cm4lMjBuZXclMjBDKHMpJTNCJTVDbiU3RCUyMiUyQyUyMmlzRW50cnklMjIlM0FmYWxzZSU3RCU1RCUyQyUyMm9wdGlvbnMlMjIlM0ElN0IlMjJmb3JtYXQlMjIlM0ElMjJlcyUyMiUyQyUyMm5hbWUlMjIlM0ElMjJteUJ1bmRsZSUyMiUyQyUyMmFtZCUyMiUzQSU3QiUyMmlkJTIyJTNBJTIyJTIyJTdEJTJDJTIyZ2xvYmFscyUyMiUzQSU3QiU3RCU3RCUyQyUyMmV4YW1wbGUlMjIlM0FudWxsJTdE

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants