Skip to content

minifier: redeclaration of catch binding causes incorrect minification #17307

Description

@sapphi-red
// input
try {} catch (e) {
  try {} catch (e) {
    var e = "e";
    console.log(e === "e");
  }
}
console.log(e === undefined);

// output
console.log(e === void 0);

playground

// input
try {
  throw 1
} catch (e) {
  try {
    throw 2
  } catch (e) {
    var e = "e";
    console.log(e === "e");
  }
}
console.log(e === undefined);

// output
try {
	throw 1;
} catch {
	try {
		throw 2;
	} catch (e) {
		console.log(!0);
	}
}
console.log(e === void 0);

playground

The input code does not throw "ReferenceError: e is not defined" error, but the output code does.
I guess this is caused by a bug in semantic.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions