commit 533148120333f8a4704b428772e9c4691b65f619
parent c58bb6926783fb78031e8b0f9d5388e48e5953be
Author: André Bargull <andre.bargull@gmail.com>
Date: Fri, 17 Oct 2025 11:25:41 +0000
Bug 1992993 - Part 1: Fix bad implicit constructor warnings. r=spidermonkey-reviewers,iain
Make constructors `explicit` to avoid implicit constructor warnings.
Differential Revision: https://phabricator.services.mozilla.com/D267789
Diffstat:
16 files changed, 71 insertions(+), 102 deletions(-)
diff --git a/js/src/jit/loong64/Assembler-loong64.h b/js/src/jit/loong64/Assembler-loong64.h
@@ -681,7 +681,7 @@ class BOffImm16 {
bool isInvalid() { return data == INVALID; }
Instruction* getDest(Instruction* src) const;
- BOffImm16(InstImm inst);
+ explicit BOffImm16(InstImm inst);
};
// A JOffImm26 is a 26 bit immediate that is used for unconditional jumps.
@@ -723,7 +723,7 @@ class Imm16 {
public:
Imm16();
- Imm16(uint32_t imm) : value(imm) {}
+ explicit Imm16(uint32_t imm) : value(imm) {}
uint32_t encode() { return value; }
int32_t decodeSigned() { return value; }
uint32_t decodeUnsigned() { return value; }
@@ -740,7 +740,7 @@ class Imm8 {
public:
Imm8();
- Imm8(uint32_t imm) : value(imm) {}
+ explicit Imm8(uint32_t imm) : value(imm) {}
uint32_t encode(uint32_t shift) { return value << shift; }
int32_t decodeSigned() { return value; }
uint32_t decodeUnsigned() { return value; }
@@ -764,9 +764,9 @@ class Operand {
int32_t offset;
public:
- Operand(Register reg_) : tag(REG), reg(reg_.code()) {}
+ MOZ_IMPLICIT Operand(Register reg_) : tag(REG), reg(reg_.code()) {}
- Operand(FloatRegister freg) : tag(FREG), reg(freg.code()) {}
+ explicit Operand(FloatRegister freg) : tag(FREG), reg(freg.code()) {}
Operand(Register base, Imm32 off)
: tag(MEM), reg(base.code()), offset(off.value) {}
@@ -774,7 +774,7 @@ class Operand {
Operand(Register base, int32_t off)
: tag(MEM), reg(base.code()), offset(off) {}
- Operand(const Address& addr)
+ explicit Operand(const Address& addr)
: tag(MEM), reg(addr.base.code()), offset(addr.offset) {}
Tag getTag() const { return tag; }
@@ -1526,7 +1526,7 @@ class Instruction {
protected:
// Standard constructor
- Instruction(uint32_t data_) : data(data_) {}
+ explicit Instruction(uint32_t data_) : data(data_) {}
// You should never create an instruction directly. You should create a
// more specific instruction which will eventually call one of these
// constructors for you.
diff --git a/js/src/jit/loong64/CodeGenerator-loong64.cpp b/js/src/jit/loong64/CodeGenerator-loong64.cpp
@@ -153,7 +153,7 @@ class js::jit::OutOfLineTableSwitch
}
public:
- OutOfLineTableSwitch(MTableSwitch* mir) : mir_(mir) {}
+ explicit OutOfLineTableSwitch(MTableSwitch* mir) : mir_(mir) {}
MTableSwitch* mir() const { return mir_; }
diff --git a/js/src/jit/loong64/MacroAssembler-loong64.h b/js/src/jit/loong64/MacroAssembler-loong64.h
@@ -39,7 +39,7 @@ struct ImmShiftedTag : public ImmWord {
};
struct ImmTag : public Imm32 {
- ImmTag(JSValueTag mask) : Imm32(int32_t(mask)) {}
+ explicit ImmTag(JSValueTag mask) : Imm32(int32_t(mask)) {}
};
static const int defaultShift = 3;
diff --git a/js/src/jit/loong64/MoveEmitter-loong64.h b/js/src/jit/loong64/MoveEmitter-loong64.h
@@ -52,7 +52,7 @@ class MoveEmitterLOONG64 {
void emit(const MoveOp& move);
public:
- MoveEmitterLOONG64(MacroAssembler& masm)
+ explicit MoveEmitterLOONG64(MacroAssembler& masm)
: inCycle_(0),
masm(masm),
pushedAtStart_(masm.framePushed()),
diff --git a/js/src/jit/mips-shared/Assembler-mips-shared.h b/js/src/jit/mips-shared/Assembler-mips-shared.h
@@ -550,7 +550,7 @@ class BOffImm16 {
bool isInvalid() { return data == INVALID; }
Instruction* getDest(Instruction* src) const;
- BOffImm16(InstImm inst);
+ explicit BOffImm16(InstImm inst);
};
// A JOffImm26 is a 26 bit immediate that is used for unconditional jumps.
@@ -592,7 +592,7 @@ class Imm16 {
public:
Imm16();
- Imm16(uint32_t imm) : value(imm) {}
+ explicit Imm16(uint32_t imm) : value(imm) {}
uint32_t encode() { return value; }
int32_t decodeSigned() { return value; }
uint32_t decodeUnsigned() { return value; }
@@ -612,7 +612,7 @@ class Imm8 {
public:
Imm8();
- Imm8(uint32_t imm) : value(imm) {}
+ explicit Imm8(uint32_t imm) : value(imm) {}
uint32_t encode(uint32_t shift) { return value << shift; }
int32_t decodeSigned() { return value; }
uint32_t decodeUnsigned() { return value; }
@@ -634,7 +634,7 @@ class GSImm13 {
public:
GSImm13();
- GSImm13(uint32_t imm) : value(imm & ~0xf) {}
+ explicit GSImm13(uint32_t imm) : value(imm & ~0xf) {}
uint32_t encode(uint32_t shift) { return ((value >> 4) & 0x1ff) << shift; }
int32_t decodeSigned() { return value; }
uint32_t decodeUnsigned() { return value; }
@@ -653,9 +653,9 @@ class Operand {
int32_t offset;
public:
- Operand(Register reg_) : tag(REG), reg(reg_.code()) {}
+ explicit Operand(Register reg_) : tag(REG), reg(reg_.code()) {}
- Operand(FloatRegister freg) : tag(FREG), reg(freg.code()) {}
+ explicit Operand(FloatRegister freg) : tag(FREG), reg(freg.code()) {}
Operand(Register base, Imm32 off)
: tag(MEM), reg(base.code()), offset(off.value) {}
@@ -663,7 +663,7 @@ class Operand {
Operand(Register base, int32_t off)
: tag(MEM), reg(base.code()), offset(off) {}
- Operand(const Address& addr)
+ explicit Operand(const Address& addr)
: tag(MEM), reg(addr.base.code()), offset(addr.offset) {}
Tag getTag() const { return tag; }
@@ -1319,7 +1319,7 @@ class Instruction {
uint32_t data;
// Standard constructor
- Instruction(uint32_t data_) : data(data_) {}
+ explicit Instruction(uint32_t data_) : data(data_) {}
// You should never create an instruction directly. You should create a
// more specific instruction which will eventually call one of these
@@ -1443,7 +1443,7 @@ class InstImm : public Instruction {
: Instruction(op | rs | cc | off.encode()) {}
InstImm(OpcodeField op, Register rs, Register rt, Imm16 off)
: Instruction(op | RS(rs) | RT(rt) | off.encode()) {}
- InstImm(uint32_t raw) : Instruction(raw) {}
+ MOZ_IMPLICIT InstImm(uint32_t raw) : Instruction(raw) {}
// For floating-point loads and stores.
InstImm(OpcodeField op, Register rs, FloatRegister rt, Imm16 off)
: Instruction(op | RS(rs) | RT(rt) | off.encode()) {}
@@ -1499,7 +1499,7 @@ class InstGS : public Instruction {
InstGS(OpcodeField op, Register rs, FloatRegister rt, FloatRegister rz,
GSImm13 off, FunctionField ff)
: Instruction(op | RS(rs) | RT(rt) | RZ(rz) | off.encode(6) | ff) {}
- InstGS(uint32_t raw) : Instruction(raw) {}
+ explicit InstGS(uint32_t raw) : Instruction(raw) {}
// For floating-point unaligned loads and stores.
InstGS(OpcodeField op, Register rs, FloatRegister rt, Imm8 off,
FunctionField ff)
diff --git a/js/src/jit/mips-shared/CodeGenerator-mips-shared.cpp b/js/src/jit/mips-shared/CodeGenerator-mips-shared.cpp
@@ -1301,7 +1301,7 @@ class js::jit::OutOfLineTableSwitch
}
public:
- OutOfLineTableSwitch(MTableSwitch* mir) : mir_(mir) {}
+ explicit OutOfLineTableSwitch(MTableSwitch* mir) : mir_(mir) {}
MTableSwitch* mir() const { return mir_; }
diff --git a/js/src/jit/mips-shared/MacroAssembler-mips-shared.cpp b/js/src/jit/mips-shared/MacroAssembler-mips-shared.cpp
@@ -2329,7 +2329,7 @@ void MacroAssembler::patchSub32FromMemAndBranchIfNegative(CodeOffset offset,
// | | | |
// 001001 rs rt imm = addiu rs, rt, imm
MOZ_ASSERT(inst->extractOpcode() == ((uint32_t)op_addiu >> OpcodeShift));
- inst->setImm16(-val & 0xffff);
+ inst->setImm16(Imm16(-val & 0xffff));
}
// ========================================================================
diff --git a/js/src/jit/mips-shared/MoveEmitter-mips-shared.h b/js/src/jit/mips-shared/MoveEmitter-mips-shared.h
@@ -52,7 +52,7 @@ class MoveEmitterMIPSShared {
void emit(const MoveOp& move);
public:
- MoveEmitterMIPSShared(MacroAssembler& masm)
+ explicit MoveEmitterMIPSShared(MacroAssembler& masm)
: inCycle_(0),
masm(masm),
pushedAtStart_(masm.framePushed()),
diff --git a/js/src/jit/mips64/Architecture-mips64.h b/js/src/jit/mips64/Architecture-mips64.h
@@ -102,7 +102,7 @@ class FloatRegister : public FloatRegisterMIPSShared {
ContentType kind_ : 3;
public:
- constexpr FloatRegister(uint32_t r, ContentType kind = Codes::Double)
+ constexpr explicit FloatRegister(uint32_t r, ContentType kind = Codes::Double)
: reg_(Encoding(r)), kind_(kind) {}
constexpr FloatRegister()
: reg_(Encoding(FloatRegisters::invalid_freg)), kind_(Codes::Double) {}
diff --git a/js/src/jit/mips64/Assembler-mips64.h b/js/src/jit/mips64/Assembler-mips64.h
@@ -90,14 +90,14 @@ static constexpr Register JSReturnReg = v1;
static constexpr Register JSReturnReg_Type = JSReturnReg;
static constexpr Register JSReturnReg_Data = JSReturnReg;
static constexpr Register64 ReturnReg64(ReturnReg);
-static constexpr FloatRegister ReturnFloat32Reg = {FloatRegisters::f0,
- FloatRegisters::Single};
-static constexpr FloatRegister ReturnDoubleReg = {FloatRegisters::f0,
- FloatRegisters::Double};
-static constexpr FloatRegister ScratchFloat32Reg = {FloatRegisters::f23,
- FloatRegisters::Single};
-static constexpr FloatRegister ScratchDoubleReg = {FloatRegisters::f23,
- FloatRegisters::Double};
+static constexpr FloatRegister ReturnFloat32Reg{FloatRegisters::f0,
+ FloatRegisters::Single};
+static constexpr FloatRegister ReturnDoubleReg{FloatRegisters::f0,
+ FloatRegisters::Double};
+static constexpr FloatRegister ScratchFloat32Reg{FloatRegisters::f23,
+ FloatRegisters::Single};
+static constexpr FloatRegister ScratchDoubleReg{FloatRegisters::f23,
+ FloatRegisters::Double};
struct ScratchFloat32Scope : public AutoFloatRegisterScope {
explicit ScratchFloat32Scope(MacroAssembler& masm)
@@ -109,70 +109,38 @@ struct ScratchDoubleScope : public AutoFloatRegisterScope {
: AutoFloatRegisterScope(masm, ScratchDoubleReg) {}
};
-static constexpr FloatRegister f0 = {FloatRegisters::f0,
- FloatRegisters::Double};
-static constexpr FloatRegister f1 = {FloatRegisters::f1,
- FloatRegisters::Double};
-static constexpr FloatRegister f2 = {FloatRegisters::f2,
- FloatRegisters::Double};
-static constexpr FloatRegister f3 = {FloatRegisters::f3,
- FloatRegisters::Double};
-static constexpr FloatRegister f4 = {FloatRegisters::f4,
- FloatRegisters::Double};
-static constexpr FloatRegister f5 = {FloatRegisters::f5,
- FloatRegisters::Double};
-static constexpr FloatRegister f6 = {FloatRegisters::f6,
- FloatRegisters::Double};
-static constexpr FloatRegister f7 = {FloatRegisters::f7,
- FloatRegisters::Double};
-static constexpr FloatRegister f8 = {FloatRegisters::f8,
- FloatRegisters::Double};
-static constexpr FloatRegister f9 = {FloatRegisters::f9,
- FloatRegisters::Double};
-static constexpr FloatRegister f10 = {FloatRegisters::f10,
- FloatRegisters::Double};
-static constexpr FloatRegister f11 = {FloatRegisters::f11,
- FloatRegisters::Double};
-static constexpr FloatRegister f12 = {FloatRegisters::f12,
- FloatRegisters::Double};
-static constexpr FloatRegister f13 = {FloatRegisters::f13,
- FloatRegisters::Double};
-static constexpr FloatRegister f14 = {FloatRegisters::f14,
- FloatRegisters::Double};
-static constexpr FloatRegister f15 = {FloatRegisters::f15,
- FloatRegisters::Double};
-static constexpr FloatRegister f16 = {FloatRegisters::f16,
- FloatRegisters::Double};
-static constexpr FloatRegister f17 = {FloatRegisters::f17,
- FloatRegisters::Double};
-static constexpr FloatRegister f18 = {FloatRegisters::f18,
- FloatRegisters::Double};
-static constexpr FloatRegister f19 = {FloatRegisters::f19,
- FloatRegisters::Double};
-static constexpr FloatRegister f20 = {FloatRegisters::f20,
- FloatRegisters::Double};
-static constexpr FloatRegister f21 = {FloatRegisters::f21,
- FloatRegisters::Double};
-static constexpr FloatRegister f22 = {FloatRegisters::f22,
- FloatRegisters::Double};
-static constexpr FloatRegister f23 = {FloatRegisters::f23,
- FloatRegisters::Double};
-static constexpr FloatRegister f24 = {FloatRegisters::f24,
- FloatRegisters::Double};
-static constexpr FloatRegister f25 = {FloatRegisters::f25,
- FloatRegisters::Double};
-static constexpr FloatRegister f26 = {FloatRegisters::f26,
- FloatRegisters::Double};
-static constexpr FloatRegister f27 = {FloatRegisters::f27,
- FloatRegisters::Double};
-static constexpr FloatRegister f28 = {FloatRegisters::f28,
- FloatRegisters::Double};
-static constexpr FloatRegister f29 = {FloatRegisters::f29,
- FloatRegisters::Double};
-static constexpr FloatRegister f30 = {FloatRegisters::f30,
- FloatRegisters::Double};
-static constexpr FloatRegister f31 = {FloatRegisters::f31,
- FloatRegisters::Double};
+static constexpr FloatRegister f0{FloatRegisters::f0, FloatRegisters::Double};
+static constexpr FloatRegister f1{FloatRegisters::f1, FloatRegisters::Double};
+static constexpr FloatRegister f2{FloatRegisters::f2, FloatRegisters::Double};
+static constexpr FloatRegister f3{FloatRegisters::f3, FloatRegisters::Double};
+static constexpr FloatRegister f4{FloatRegisters::f4, FloatRegisters::Double};
+static constexpr FloatRegister f5{FloatRegisters::f5, FloatRegisters::Double};
+static constexpr FloatRegister f6{FloatRegisters::f6, FloatRegisters::Double};
+static constexpr FloatRegister f7{FloatRegisters::f7, FloatRegisters::Double};
+static constexpr FloatRegister f8{FloatRegisters::f8, FloatRegisters::Double};
+static constexpr FloatRegister f9{FloatRegisters::f9, FloatRegisters::Double};
+static constexpr FloatRegister f10{FloatRegisters::f10, FloatRegisters::Double};
+static constexpr FloatRegister f11{FloatRegisters::f11, FloatRegisters::Double};
+static constexpr FloatRegister f12{FloatRegisters::f12, FloatRegisters::Double};
+static constexpr FloatRegister f13{FloatRegisters::f13, FloatRegisters::Double};
+static constexpr FloatRegister f14{FloatRegisters::f14, FloatRegisters::Double};
+static constexpr FloatRegister f15{FloatRegisters::f15, FloatRegisters::Double};
+static constexpr FloatRegister f16{FloatRegisters::f16, FloatRegisters::Double};
+static constexpr FloatRegister f17{FloatRegisters::f17, FloatRegisters::Double};
+static constexpr FloatRegister f18{FloatRegisters::f18, FloatRegisters::Double};
+static constexpr FloatRegister f19{FloatRegisters::f19, FloatRegisters::Double};
+static constexpr FloatRegister f20{FloatRegisters::f20, FloatRegisters::Double};
+static constexpr FloatRegister f21{FloatRegisters::f21, FloatRegisters::Double};
+static constexpr FloatRegister f22{FloatRegisters::f22, FloatRegisters::Double};
+static constexpr FloatRegister f23{FloatRegisters::f23, FloatRegisters::Double};
+static constexpr FloatRegister f24{FloatRegisters::f24, FloatRegisters::Double};
+static constexpr FloatRegister f25{FloatRegisters::f25, FloatRegisters::Double};
+static constexpr FloatRegister f26{FloatRegisters::f26, FloatRegisters::Double};
+static constexpr FloatRegister f27{FloatRegisters::f27, FloatRegisters::Double};
+static constexpr FloatRegister f28{FloatRegisters::f28, FloatRegisters::Double};
+static constexpr FloatRegister f29{FloatRegisters::f29, FloatRegisters::Double};
+static constexpr FloatRegister f30{FloatRegisters::f30, FloatRegisters::Double};
+static constexpr FloatRegister f31{FloatRegisters::f31, FloatRegisters::Double};
// MIPS64 CPUs can only load multibyte data that is "naturally"
// eight-byte-aligned, sp register should be sixteen-byte-aligned.
diff --git a/js/src/jit/mips64/MacroAssembler-mips64.h b/js/src/jit/mips64/MacroAssembler-mips64.h
@@ -27,7 +27,7 @@ struct ImmShiftedTag : public ImmWord {
};
struct ImmTag : public Imm32 {
- ImmTag(JSValueTag mask) : Imm32(int32_t(mask)) {}
+ explicit ImmTag(JSValueTag mask) : Imm32(int32_t(mask)) {}
};
static constexpr ValueOperand JSReturnOperand{JSReturnReg};
diff --git a/js/src/jit/mips64/MoveEmitter-mips64.h b/js/src/jit/mips64/MoveEmitter-mips64.h
@@ -20,7 +20,8 @@ class MoveEmitterMIPS64 : public MoveEmitterMIPSShared {
MoveOp::Type type, uint32_t slot);
public:
- MoveEmitterMIPS64(MacroAssembler& masm) : MoveEmitterMIPSShared(masm) {}
+ explicit MoveEmitterMIPS64(MacroAssembler& masm)
+ : MoveEmitterMIPSShared(masm) {}
};
typedef MoveEmitterMIPS64 MoveEmitter;
diff --git a/js/src/jit/riscv64/Architecture-riscv64.h b/js/src/jit/riscv64/Architecture-riscv64.h
@@ -473,7 +473,7 @@ struct FloatRegister {
MOZ_ASSERT(uint32_t(encoding) < Codes::Total);
}
- constexpr FloatRegister(Encoding encoding)
+ constexpr explicit FloatRegister(Encoding encoding)
: encoding_(encoding), kind_(FloatRegisters::Double), invalid_(false) {
MOZ_ASSERT(uint32_t(encoding) < Codes::Total);
}
diff --git a/js/src/jit/riscv64/Assembler-riscv64.h b/js/src/jit/riscv64/Assembler-riscv64.h
@@ -248,7 +248,7 @@ class Assembler : public AssemblerShared,
Header(int size_, bool isNatural_)
: size(size_), isNatural(isNatural_), ONES(0xffff) {}
- Header(uint32_t data) : data(data) {
+ explicit Header(uint32_t data) : data(data) {
static_assert(sizeof(Header) == sizeof(uint32_t));
MOZ_ASSERT(ONES == 0xffff);
}
diff --git a/js/src/jit/riscv64/CodeGenerator-riscv64.cpp b/js/src/jit/riscv64/CodeGenerator-riscv64.cpp
@@ -152,7 +152,7 @@ class js::jit::OutOfLineTableSwitch
}
public:
- OutOfLineTableSwitch(MTableSwitch* mir) : mir_(mir) {}
+ explicit OutOfLineTableSwitch(MTableSwitch* mir) : mir_(mir) {}
MTableSwitch* mir() const { return mir_; }
diff --git a/js/src/jit/riscv64/MacroAssembler-riscv64.h b/js/src/jit/riscv64/MacroAssembler-riscv64.h
@@ -90,7 +90,7 @@ struct ImmShiftedTag : public ImmWord {
};
struct ImmTag : public Imm32 {
- ImmTag(JSValueTag mask) : Imm32(int32_t(mask)) {}
+ explicit ImmTag(JSValueTag mask) : Imm32(int32_t(mask)) {}
};
class MacroAssemblerRiscv64 : public Assembler {