Open zmodem opened 6 years ago
mentioned in issue llvm/llvm-bugzilla-archive#34634
Bug llvm/llvm-bugzilla-archive#34634 has been marked as a duplicate of this bug.
Smaller reproducer with the same assertion.
char a; long b; void c() { if (~4 b & 45 b) a = 0; }
creduced:
typedef int size_t; template <class _Tp, class = _Tp> class C; class A { protected: typedef float &reference; float *_begin; }; template <class, class> class C : A { public: C(long); reference operator; };
class B { void m_fn1(); long kFloatStride; static constexpr size_t kVertexCount = 24; }; template <class _Tp, class _Allocator> typename C<_Tp, _Allocator>::reference C<_Tp, _Allocator>::operator[](long p1) { return _begin[p1]; }
void B::m_fn1() {
int floatStride = kFloatStride;
size_t floatCount;
C
$ bin/clang -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -target-cpu x86-64 -O2 -std=gnu++14 /tmp/a.cc clang: ../lib/CodeGen/MachineRegisterInfo.cpp:366: llvm::MachineInstr* llvm::MachineRegisterInfo::getVRegDef(unsigned int) const: Assertion `(I.atEnd() || std::next(I) == def_instr_end()) && "getVRegDef assumes a single definition or no definition"' failed.
Stack dump:
I'm running creduce on the reproducer, but it's pretty slow.
Reverted in r313376
Extended Description
See https://bugs.chromium.org/p/chromium/issues/detail?id=765748#c1 for repro.