diff --git a/gcc/analyzer/constraint-manager.cc b/gcc/analyzer/constraint-manager.cc index 6df23fb477ead9e15f3b8b8fbf164eea1e64706f..ea6b5dc60e02fb10980f0bddb03c5f2d362c0079 100644 --- a/gcc/analyzer/constraint-manager.cc +++ b/gcc/analyzer/constraint-manager.cc @@ -432,7 +432,9 @@ bounded_range::intersects_p (const bounded_range &other, bool bounded_range::operator== (const bounded_range &other) const { - return (tree_int_cst_equal (m_lower, other.m_lower) + return (TREE_TYPE (m_lower) == TREE_TYPE (other.m_lower) + && TREE_TYPE (m_upper) == TREE_TYPE (other.m_upper) + && tree_int_cst_equal (m_lower, other.m_lower) && tree_int_cst_equal (m_upper, other.m_upper)); } diff --git a/gcc/testsuite/g++.dg/analyzer/pr102662.C b/gcc/testsuite/g++.dg/analyzer/pr102662.C new file mode 100644 index 0000000000000000000000000000000000000000..99252c7d109e66b35e175513ec424f3bf70fd078 --- /dev/null +++ b/gcc/testsuite/g++.dg/analyzer/pr102662.C @@ -0,0 +1,39 @@ +/* { dg-additional-options "-fstrict-enums" } */ + +enum OpCode { + OP_MOVE, + OP_LOADK, + OP_LOADBOOL, + OP_LOADNIL, + OP_GETUPVAL, + OP_SETUPVAL +}; + +enum OpArg { + OpArgN, + OpArgU, + OpArgR, + OpArgK +}; + +void +symbexec_lastpc (enum OpCode symbexec_lastpc_op, enum OpArg luaP_opmodes) +{ + switch (luaP_opmodes) + { + case OpArgN: + case OpArgK: + { + switch (symbexec_lastpc_op) + { + case OP_LOADNIL: + case OP_SETUPVAL: + break; + default: + break; + } + } + default: + break; + } +}