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])

Reply via email to