https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81278
Bug ID: 81278 Summary: [8 Regression] -fcompare-debug failure (length) Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: trippels at gcc dot gnu.org Target Milestone: --- Created attachment 41661 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41661&action=edit unreduced testcase trippels@gcc2-power8 llvm_build % cat Metadata.ii template <typename _ForwardIterator1, typename _ForwardIterator2> void iter_swap(_ForwardIterator1, _ForwardIterator2); template <typename _RandomAccessIterator> _RandomAccessIterator __rotate(_RandomAccessIterator p1, _RandomAccessIterator p2) { if (p1 == p2) return 0; int a = p2 - p1; if (a == -a) for (; p2;) iter_swap(0, 0); return p2; } struct A { char buffer[0]; template <typename T> char *combine_data(int, char *, int, T); template <typename T, typename... Ts> void combine(int p1, char *p2, int, T p4, Ts... p5) { p2 = combine_data(p1, p2, 0, p4); combine(0, p2, 0, p5...); } void combine(int, char *p2, int) { char *b = p2; __rotate(buffer, b); } }; template <typename... Ts> void hash_combine(Ts... p1) { A c; c.combine(0, 0, p1...); } template <typename KeyInfoT> struct B { template <class LookupKeyT> void find_as(LookupKeyT p1) { LookupBucketFor(p1, 0); } template <typename LookupKeyT> void getHashValue(LookupKeyT &p1) { KeyInfoT::getHashValue(p1); } template <typename LookupKeyT> void LookupBucketFor(LookupKeyT p1, int) { getHashValue(p1); } }; struct C; struct D { B<C> TheMap; template <class LookupKeyT> void find_as(LookupKeyT p1) { TheMap.find_as(p1); } }; template <typename, typename> struct I : D {}; struct F { enum {} getMetadataID0; }; struct G { int MIType; int Line; F File; F *Elements; G(int); void getHashValue() { hash_combine(0, Line, File, Elements); } }; struct C { using KeyTy = G; static int getHashValue(KeyTy p1) { p1.getHashValue(); } }; using DIMacroFileInfo = C; struct H { I<int *, DIMacroFileInfo> DIMacroFiles; }; template <class T, class InfoT> void getUniqued(I<T, InfoT> p1, typename InfoT::KeyTy p2) { p1.find_as(p2); } template <class T, class InfoT> void uniquifyImpl(T *, I<T *, InfoT> p2) { getUniqued(p2, 0); } int d; void uniquify() { switch (0) { case 0: H e; uniquifyImpl(&d, e.DIMacroFiles); } } trippels@gcc2-power8 llvm_build % /home/trippels/gcc_8/usr/local/bin/g++ --save-temps -c -O3 -fcompare-debug Metadata.ii g++: error: Metadata.ii: -fcompare-debug failure trippels@gcc2-power8 llvm_build % diff -u Metadata.gkd Metadata.gk.gkd --- Metadata.gkd 2017-07-02 12:44:48.573295315 +0000 +++ Metadata.gk.gkd 2017-07-02 12:44:48.613296247 +0000 @@ -101,7 +101,7 @@ (insn # 0 0 (set (reg:DI 5 5) (const_int 0 [0])) "Metadata.ii":19# {*movdi_internal64} (nil)) -(insn # 0 0 (set (reg:DI 29 29 [orig:121 p1$8 ] [121]) +(insn # 0 0 (set (reg:DI 29 29 [orig:131 p1$8 ] [131]) (zero_extend:DI (mem/c:SI (plus:DI (reg/f:DI 1 1) (const_int 88 [0x58])) [ D.xxxx+8 S4 A64])))# {zero_extendsidi2} (nil)) @@ -137,8 +137,8 @@ (expr_list:SI (use (reg:DI 7 7)) (nil)))))))) (insn # 0 0 (set (reg:SI 7 7) - (reg:SI 29 29 [orig:121 p1$8 ] [121])) "Metadata.ii":19# {*movsi_internal1} - (expr_list:REG_DEAD (reg:SI 29 29 [orig:121 p1$8 ] [121]) + (reg:SI 29 29 [orig:131 p1$8 ] [131])) "Metadata.ii":19# {*movsi_internal1} + (expr_list:REG_DEAD (reg:SI 29 29 [orig:131 p1$8 ] [131]) (nil))) (insn # 0 0 (set (reg:DI 6 6) (const_int 0 [0])) "Metadata.ii":19# {*movdi_internal64} @@ -214,7 +214,7 @@ (expr_list:DI (use (reg:DI 7 7)) (nil)))))))) (insn # 0 0 (set (reg:CC 75 7 [148]) - (compare:CC (reg/f:DI 3 3 [orig:124 _8 ] [124]) + (compare:CC (reg/f:DI 3 3 [orig:123 _8 ] [123]) (reg/f:DI 31 31 [144]))) "Metadata.ii":6# {*cmpdi_signed} (nil)) (jump_insn # 0 0 (set (pc) @@ -228,7 +228,7 @@ (note # 0 0 [bb 3] NOTE_INSN_BASIC_BLOCK) (note # 0 0 NOTE_INSN_DELETED) (insn:TI # 0 0 (set (reg:DI 31 31 [150]) - (minus:DI (reg/f:DI 3 3 [orig:124 _8 ] [124]) + (minus:DI (reg/f:DI 3 3 [orig:123 _8 ] [123]) (reg/f:DI 31 31 [144]))) "Metadata.ii":8# {*subfdi3} (nil)) (insn # 0 0 (set (reg:SI 9 9 [151]) @@ -291,9 +291,9 @@ (code_label # 0 0 9 (nil) [1 uses]) (note # 0 0 [bb 5] NOTE_INSN_BASIC_BLOCK) (insn:TI # 0 0 (set (reg:CC 75 7 [153]) - (compare:CC (reg/f:DI 3 3 [orig:124 _8 ] [124]) + (compare:CC (reg/f:DI 3 3 [orig:123 _8 ] [123]) (const_int 0 [0]))) "Metadata.ii":10# {*cmpdi_signed} - (expr_list:REG_DEAD (reg/f:DI 3 3 [orig:124 _8 ] [124]) + (expr_list:REG_DEAD (reg/f:DI 3 3 [orig:123 _8 ] [123]) (nil))) (jump_insn # 0 0 (set (pc) (if_then_else (eq (reg:CC 75 7 [153])