diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8640e2e6af73..f00fdd8c0a3c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-04-25 Mark Wielaard + + * dwarf2out.c (file_info_cmp): Sort longer dir prefixes before + shorter ones. + 2018-04-25 Jakub Jelinek * config/i386/i386.md (*x86_movcc_0_m1): Use type "alu1" rather diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 620e66986be6..d3d925d5279d 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -11955,7 +11955,9 @@ file_info_cmp (const void *p1, const void *p2) we return consistent values to qsort since some will get confused if we return the same value when identical operands are passed in opposite orders. So if neither has a directory, return 0 and otherwise return - 1 or -1 depending on which one has the directory. */ + 1 or -1 depending on which one has the directory. We want the one with + the directory to sort after the one without, so all no directory files + are at the start (normally only the compilation unit file). */ if ((s1->path == s1->fname || s2->path == s2->fname)) return (s2->path == s2->fname) - (s1->path == s1->fname); @@ -11966,11 +11968,12 @@ file_info_cmp (const void *p1, const void *p2) { ++cp1; ++cp2; - /* Reached the end of the first path? If so, handle like above. */ + /* Reached the end of the first path? If so, handle like above, + but now we want longer directory prefixes before shorter ones. */ if ((cp1 == (const unsigned char *) s1->fname) || (cp2 == (const unsigned char *) s2->fname)) - return ((cp2 == (const unsigned char *) s2->fname) - - (cp1 == (const unsigned char *) s1->fname)); + return ((cp1 == (const unsigned char *) s1->fname) + - (cp2 == (const unsigned char *) s2->fname)); /* Character of current path component the same? */ else if (*cp1 != *cp2)