Hello community, here is the log from the commit of package kdbg for openSUSE:Factory checked in at 2016-10-24 14:44:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kdbg (Old) and /work/SRC/openSUSE:Factory/.kdbg.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kdbg" Changes: -------- --- /work/SRC/openSUSE:Factory/kdbg/kdbg.changes 2016-02-24 18:43:01.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.kdbg.new/kdbg.changes 2016-10-24 14:44:44.000000000 +0200 @@ -1,0 +2,11 @@ +Sun Oct 23 16:32:35 UTC 2016 - wba...@tmo.at + +- Update to 2.5.6: + * A popup shows the complete value of variables. + * The values printed by GDB for uninitialized references and + pointer-to-member variables no longer truncate the variable list. + * A few more C++ keywords are now highlighted. + * The CMakeLists.txt file was adjusted for newer cmake. +- Removed fix-build-with-cmake-3_4_3.diff, it's no longer necessary + +------------------------------------------------------------------- Old: ---- fix-build-with-cmake-3_4_3.diff kdbg-2.5.5.tar.gz New: ---- kdbg-2.5.6.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kdbg.spec ++++++ --- /var/tmp/diff_new_pack.uy5urq/_old 2016-10-24 14:44:45.000000000 +0200 +++ /var/tmp/diff_new_pack.uy5urq/_new 2016-10-24 14:44:45.000000000 +0200 @@ -17,15 +17,13 @@ Name: kdbg -Version: 2.5.5 +Version: 2.5.6 Release: 0 Summary: Graphical User Interface for GDB License: GPL-2.0+ Group: Development/Tools/Debuggers Url: http://www.kdbg.org/ Source0: %{name}-%{version}.tar.gz -# PATCH-FIX-UPSTREAM fix-build-with-cmake-3_4_3.diff -- Include files containing the functions used by the build system -Patch0: fix-build-with-cmake-3_4_3.diff Patch1: susepatches.diff BuildRequires: fdupes %if 0%{?suse_version} >= 1310 @@ -54,7 +52,6 @@ %lang_package %prep %setup -q -%patch0 -p1 %patch1 -p1 %build ++++++ kdbg-2.5.5.tar.gz -> kdbg-2.5.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/CMakeLists.txt new/kdbg-2.5.6/CMakeLists.txt --- old/kdbg-2.5.5/CMakeLists.txt 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/CMakeLists.txt 2016-10-09 11:25:15.000000000 +0200 @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.6) -set(KDBG_VERSION 2.5.5) +set(KDBG_VERSION 2.5.6) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/kdbg/version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/kdbg/version.h) find_package(KDE4 REQUIRED) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/ReleaseNotes-2.5.6 new/kdbg-2.5.6/ReleaseNotes-2.5.6 --- old/kdbg-2.5.5/ReleaseNotes-2.5.6 1970-01-01 01:00:00.000000000 +0100 +++ new/kdbg-2.5.6/ReleaseNotes-2.5.6 2016-10-09 11:25:15.000000000 +0200 @@ -0,0 +1,18 @@ +KDbg Release Notes for version 2.5.6 +==================================== + +Changes since 2.5.5 +------------------- + +Enhancements + +- A popup shows the complete value of variables. + +Bug fixes + +- The values printed by GDB for uninitialized references and + pointer-to-member variables no longer truncate the variable list. + +- A few more C++ keywords are now highlighted. + +- The CMakeLists.txt file was adjusted for newer cmake. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/CMakeLists.txt new/kdbg-2.5.6/kdbg/CMakeLists.txt --- old/kdbg-2.5.5/kdbg/CMakeLists.txt 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/CMakeLists.txt 2016-10-09 11:25:15.000000000 +0200 @@ -4,6 +4,7 @@ include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) include(CheckFunctionExists) +include(CheckIncludeFiles) CHECK_INCLUDE_FILES(pty.h HAVE_PTY_H) CHECK_INCLUDE_FILES(libutil.h HAVE_LIBUTIL_H) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/exprwnd.cpp new/kdbg-2.5.6/kdbg/exprwnd.cpp --- old/kdbg-2.5.5/kdbg/exprwnd.cpp 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/exprwnd.cpp 2016-10-09 11:25:15.000000000 +0200 @@ -262,6 +262,13 @@ return 0; } +QVariant VarTree::data(int column, int role) const +{ + if (role != Qt::ToolTipRole || column != 1) + return QTreeWidgetItem::data(column, role); + return QVariant(value()); +} + ExprValue::ExprValue(const QString& name, VarTree::NameKind aKind) : m_name(name), m_varKind(VarTree::VKsimple), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/exprwnd.h new/kdbg-2.5.6/kdbg/exprwnd.h --- old/kdbg-2.5.5/kdbg/exprwnd.h 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/exprwnd.h 2016-10-09 11:25:15.000000000 +0200 @@ -62,6 +62,8 @@ QString value() const { return m_baseValue; } VarTree* child(int i) const { return static_cast<VarTree*>(QTreeWidgetItem::child(i)); } + virtual QVariant data(int column, int role) const; + private: void updateValueText(); QString m_baseValue; //!< The "normal value" that the driver reported diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/gdbdriver.cpp new/kdbg-2.5.6/kdbg/gdbdriver.cpp --- old/kdbg-2.5.5/kdbg/gdbdriver.cpp 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/gdbdriver.cpp 2016-10-09 11:25:15.000000000 +0200 @@ -694,6 +694,18 @@ strncmp(output, "Internal error: ", 16) == 0; } +static void skipSpace(const char*& p) +{ + while (isspace(*p)) + p++; +} + +static void skipDecimal(const char*& p) +{ + while (isdigit(*p)) + p++; +} + /** * Returns true if the output is an error message. If wantErrorValue is * true, a new ExprValue object is created and filled with the error message. @@ -703,8 +715,7 @@ static bool parseErrorMessage(const char*& output, ExprValue*& variable, bool wantErrorValue) { - while (isspace(*output)) - output++; + skipSpace(output); // skip warnings while (strncmp(output, "warning:", 8) == 0) @@ -714,8 +725,7 @@ output += strlen(output); else output = end+1; - while (isspace(*output)) - output++; + skipSpace(output); } if (isErrorExpr(output)) @@ -762,8 +772,7 @@ * Parse off white space. gdb sometimes prints white space first if the * printed array leaded to an error. */ - while (isspace(*output)) - output++; + skipSpace(output); // special case: empty string (0 repetitions) if (strncmp(output, "Invalid number 0 of repetitions", 31) == 0) @@ -785,10 +794,8 @@ if (p == 0) { goto error; } - // skip white space - do { - p++; - } while (isspace(*p)); + p++; + skipSpace(p); if (*p == '{') { @@ -914,10 +921,8 @@ static ExprValue* parseVar(const char*& s) { const char* p = s; - - // skip whitespace - while (isspace(*p)) - p++; + + skipSpace(p); QString name; VarTree::NameKind kind; @@ -943,16 +948,14 @@ } // go for '=' - while (isspace(*p)) - p++; + skipSpace(p); if (*p != '=') { TRACE("parse error: = not found after " + name); return 0; } // skip the '=' and more whitespace p++; - while (isspace(*p)) - p++; + skipSpace(p); } ExprValue* variable = new ExprValue(name, kind); @@ -1084,8 +1087,7 @@ if (quote == '\'') { // look ahaead for <repeats 123 times> const char* q = p+1; - while (isspace(*q)) - q++; + skipSpace(q); if (strncmp(q, "<repeats ", 9) == 0) { p = q+9; while (*p != '\0' && *p != '>') @@ -1100,8 +1102,7 @@ { // look ahead for another quote const char* q = p+1; - while (isspace(*q)) - q++; + skipSpace(q); if (*q == '"' || *q == '\'') { // yes! p = q; @@ -1170,13 +1171,53 @@ s = p; } -inline void skipName(const char*& p) +static void skipName(const char*& p) { // allow : (for enumeration values) and $ and . (for _vtbl.) while (isalnum(*p) || *p == '_' || *p == ':' || *p == '$' || *p == '.') p++; } +static void skipFunctionName(const char*& p) +{ + while (*p) + { + if (*p == '<') { + // skip template parameter list + skipNestedAngles(p); + } else if (*p == '(') { + // this skips "(anonymous namespace)" as well as the formal + // parameter list of the containing function if this is a member + // of a nested class + skipNestedWithString(p, '(', ')'); + } else if (isalnum(*p) || *p == '_' || *p == ':') { + const char* start = p; + skipName(p); + // check for operator + if (p-start >= 8 && + strncmp(p-8, "operator", 8) == 0 && + // do not mistake this as the tail of some identifier + (p-start == 8 || !(isalnum(p[-9]) || p[-9] == '_'))) + { + // skip forward until we find the opening parenthesis + // this catches both operator()(...) as well as + // type conversion operators, e.g. + // operator char const*() const + // operator void(*)() + while (*p && *p != '(') + p++; + } + } else if (strncmp(p, " const", 6) == 0 && + // must not mistake "const" as the beginning of + // a subequent identifier + !isalnum(p[6]) && p[6] != '_') { + p += 6; + } else { + break; + } + } +} + static bool parseName(const char*& s, QString& name, VarTree::NameKind& kind) { kind = VarTree::NKplain; @@ -1205,8 +1246,7 @@ kind = VarTree::NKstatic; // its a static variable, name comes now - while (isspace(*p)) - p++; + skipSpace(p); s = p; skipName(p); if (p == s) { @@ -1240,8 +1280,7 @@ skipNested(s, '{', '}'); variable->m_value = QString::fromLatin1(start, s-start); variable->m_value += ' '; // add only a single space - while (isspace(*s)) - s++; + skipSpace(s); goto repeat; } else @@ -1257,8 +1296,7 @@ } s++; // final white space - while (isspace(*s)) - s++; + skipSpace(s); } } // Sometimes we find a warning; it ends at the next LF @@ -1266,8 +1304,7 @@ const char* end = strchr(s, '\n'); s = end ? end : s+strlen(s); // skip space at start of next line - while (isspace(*s)) - s++; + skipSpace(s); goto repeat; } else { // examples of leaf values (cannot be the empty string): @@ -1286,9 +1323,13 @@ // (E *) 0xbffff450 // red // &parseP (HTMLClueV *, char *) + // &virtual table offset 0, this adjustment 140737488346016 + // &virtual Dl::operator char const*() const // Variable "x" is not available. // The value of variable 'x' is distributed... // -nan(0xfffff081defa0) + // @0x100400f08: <error reading variable> + // (void (Templated<double>::*)(Templated<double> * const)) 0x400d74 <MostDerived::PrintV()>, this adjustment -16 const char*p = s; @@ -1297,8 +1338,7 @@ if (*p == '(') { skipNested(p, '(', ')'); - while (isspace(*p)) - p++; + skipSpace(p); variable->m_value = QString::fromLatin1(s, p - s); } @@ -1342,16 +1382,14 @@ checkMultiPart = true; } else if (isdigit(*p)) { // parse decimal number, possibly a float - while (isdigit(*p)) - p++; + skipDecimal(p); if (*p == '.') { /* TODO: obey i18n? */ // In long arrays an integer may be followed by '...'. // We test for this situation and don't gobble the '...'. if (p[1] != '.' || p[0] != '.') { // fractional part p++; - while (isdigit(*p)) - p++; + skipDecimal(p); } } if (*p == 'e' || *p == 'E') { @@ -1359,8 +1397,7 @@ // exponent if (*p == '-' || *p == '+') p++; - while (isdigit(*p)) - p++; + skipDecimal(p); } // for char variables there is the char, eg. 10 '\n' @@ -1378,14 +1415,23 @@ checkMultiPart = p[1] == '\''; skipString(p); } else if (*p == '&') { - // function pointer p++; - skipName(p); - while (isspace(*p)) { - p++; - } - if (*p == '(') { - skipNested(p, '(', ')'); + if (strncmp(p, "virtual ", 8) == 0) { + p += 8; + if (strncmp(p, "table offset ", 13) == 0) { + p += 13; + skipDecimal(p); + checkMultiPart = true; + } else { + skipFunctionName(p); + } + } else { + // function pointer + skipName(p); + skipSpace(p); + if (*p == '(') { + skipNested(p, '(', ')'); + } } } else if (strncmp(p, "Variable \"", 10) == 0) { // Variable "x" is not available. @@ -1424,8 +1470,7 @@ while (checkMultiPart) { // white space - while (isspace(*p)) - p++; + skipSpace(p); // may be followed by a string or <...> // if this was a pointer with a string, // reset that pointer flag since we have now a value @@ -1441,10 +1486,28 @@ } else if (*p == '<') { // if this value is part of an array, it might be followed // by <repeats 15 times>, which we don't skip here - if (strncmp(p, "<repeats ", 9) != 0) { + if (strncmp(p, "<repeats ", 9) == 0) + ; + // sometimes, a reference is followed by an error message: + // @0x100400f08: <error reading variable> + // in this case, we do not skip the text here, but leave it + // for the subsequent parsing pass induced by the reference + else if (reference && strncmp(p, "<error reading", 14) == 0) + ; + else { skipNestedAngles(p); checkMultiPart = true; } + } else if (strncmp(p, ", this adjustment ", 18) == 0) { + // pointers-to-member are sometimes followed by + // a "this adjustment" hint + p += 18; + if (*p == '-') + p++; + skipDecimal(p); + // we know that this is not a dereferencable pointer + variable->m_varKind = VarTree::VKsimple; + ++start; // skip ',', will be picked up below } if (p != start) { // there is always a blank before the string, @@ -1459,8 +1522,7 @@ } // final white space - while (isspace(*p)) - p++; + skipSpace(p); s = p; /* @@ -1478,8 +1540,7 @@ static bool parseNested(const char*& s, ExprValue* variable) { // could be a structure or an array - while (isspace(*s)) - s++; + skipSpace(s); const char* p = s; bool isStruct = false; @@ -1494,8 +1555,7 @@ } else if (isalpha(*p) || *p == '_' || *p == '$') { // look ahead for a comma after the name skipName(p); - while (isspace(*p)) - p++; + skipSpace(p); if (*p == '=') { isStruct = true; } @@ -1537,8 +1597,7 @@ break; // skip the comma and whitespace s++; - while (isspace(*s)) - s++; + skipSpace(s); } return var != 0; } @@ -1575,8 +1634,7 @@ // skip " times>" and space s = end+7; // possible final space - while (isspace(*s)) - s++; + skipSpace(s); } else { index++; } @@ -1594,8 +1652,7 @@ } // skip the comma and whitespace s++; - while (isspace(*s)) - s++; + skipSpace(s); // sometimes there is a closing brace after a comma // if (*s == '}') // break; @@ -1689,13 +1746,11 @@ */ do { skipNestedWithString(p, '(', ')'); - while (isspace(*p)) - p++; + skipSpace(p); // skip "const" if (strncmp(p, "const", 5) == 0) { p += 5; - while (isspace(*p)) - p++; + skipSpace(p); } } while (*p == '('); @@ -1790,8 +1845,7 @@ // frame number frameNo = atoi(s); - while (isdigit(*s)) - s++; + skipDecimal(s); // space and comma while (isspace(*s) || *s == ',') s++; @@ -1850,8 +1904,7 @@ else { // get Type - while (isspace(*p)) - p++; + skipSpace(p); if (strncmp(p, "breakpoint", 10) == 0) { p += 10; } else if (strncmp(p, "hw watchpoint", 13) == 0) { @@ -1861,8 +1914,7 @@ bp.type = Breakpoint::watchpoint; p += 10; } - while (isspace(*p)) - p++; + skipSpace(p); if (*p == '\0') break; // get Disp @@ -1870,16 +1922,14 @@ } while (*p != '\0' && !isspace(*p)) /* "keep" or "del" */ p++; - while (isspace(*p)) - p++; + skipSpace(p); if (*p == '\0') break; // get Enb bp.enabled = *p++ == 'y'; while (*p != '\0' && !isspace(*p)) /* "y" or "n" */ p++; - while (isspace(*p)) - p++; + skipSpace(p); if (*p == '\0') break; // the address, if present @@ -1910,8 +1960,7 @@ // may be continued in next line while (isspace(*p)) { /* p points to beginning of line */ // skip white space at beginning of line - while (isspace(*p)) - p++; + skipSpace(p); // seek end of line end = strchr(p, '\n'); @@ -1975,8 +2024,7 @@ ThreadInfo thr; // seach look for thread id, watching out for the focus indicator thr.hasFocus = false; - while (isspace(*p)) /* may be \n from prev line: see "No stack" below */ - p++; + skipSpace(p); /* may be \n from prev line: see "No stack" below */ // recent GDBs write a header line; skip it if (threads.empty() && strncmp(p, "Id Target", 11) == 0) { @@ -2002,9 +2050,7 @@ } p = end; - // skip space - while (isspace(*p)) - p++; + skipSpace(p); /* * Now follows the thread's SYSTAG. @@ -2046,8 +2092,7 @@ } else { break; } - while (isspace(*end)) - ++end; + skipSpace(end); } } thr.threadName = QString::fromLatin1(p, end-p).trimmed(); @@ -2131,8 +2176,8 @@ * * Breakpoint 4 at 0x804f158: lotto739.cpp:95. (3 locations) */ - char* fileEnd, *numStart = 0; - char* fileStart = strstr(p, "file "); + const char* fileEnd, *numStart = 0; + const char* fileStart = strstr(p, "file "); if (fileStart != 0) { fileStart += 5; @@ -2143,8 +2188,7 @@ if (numStart == 0 && p[0] == ':' && p[1] == ' ') { fileStart = p+2; - while (isspace(*fileStart)) - ++fileStart; + skipSpace(fileStart); fileEnd = strchr(fileStart, ':'); if (fileEnd != 0) numStart = fileEnd + 1; @@ -2189,8 +2233,7 @@ } while (*output != '\0') { - while (isspace(*output)) - output++; + skipSpace(output); if (*output == '\0') break; // skip occurrences of "No locals" and "No args" @@ -2328,8 +2371,7 @@ // skip number and space while (*p && !isspace(*p)) ++p; - while (isspace(*p)) - ++p; + skipSpace(p); if (*p == '(') { skipNested(p, '(', ')'); if (strncmp(p, " exited ", 8) == 0) { @@ -2389,9 +2431,7 @@ while (*output != '\0' && !isspace(*output)) { /* non-space */ output++; } - while (isspace(*output)) { /* space */ - output++; - } + skipSpace(output); /* space */ } if (*output == '\0') return shlibs; @@ -2440,8 +2480,7 @@ { RegisterInfo reg; // skip space at the start of the line - while (isspace(*output)) - output++; + skipSpace(output); // register name const char* start = output; @@ -2451,9 +2490,7 @@ break; reg.regName = QString::fromLatin1(start, output-start); - // skip space - while (isspace(*output)) - output++; + skipSpace(output); QString value; @@ -2705,8 +2742,7 @@ md.address = QString::fromLatin1(start, p-start); if (*p != ':') { // parse function offset - while (isspace(*p)) - p++; + skipSpace(p); start = p; while (*p != '\0' && !(*p == ':' && isspace(p[1]))) p++; @@ -2715,8 +2751,7 @@ if (*p == ':') p++; // skip space; this may skip a new-line char! - while (isspace(*p)) - p++; + skipSpace(p); // everything to the end of the line is the memory dump const char* end = strchr(p, '\n'); if (end != 0) { @@ -2742,8 +2777,7 @@ if (*s == '(') { skipNested(s, '(', ')'); // skip space - while (isspace(*s)) - ++s; + skipSpace(s); } repeat: @@ -2767,8 +2801,7 @@ // a pointer // if it's a pointer to a string, remove the string const char* end = s; - while (isspace(*s)) - ++s; + skipSpace(s); if (*s == '"') { // a string return QString::fromLatin1(start, end-start); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/main.cpp new/kdbg-2.5.6/kdbg/main.cpp --- old/kdbg-2.5.5/kdbg/main.cpp 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/main.cpp 2016-10-09 11:25:15.000000000 +0200 @@ -24,7 +24,7 @@ KDBG_VERSION, ki18n("A Debugger"), KAboutData::License_GPL, - ki18n("(c) 1998-2015 Johannes Sixt"), + ki18n("(c) 1998-2016 Johannes Sixt"), KLocalizedString(), /* any text */ "http://www.kdbg.org/", "j...@kdbg.org"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/sourcewnd.cpp new/kdbg-2.5.6/kdbg/sourcewnd.cpp --- old/kdbg-2.5.5/kdbg/sourcewnd.cpp 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/sourcewnd.cpp 2016-10-09 11:25:15.000000000 +0200 @@ -820,8 +820,8 @@ "private", "protected", "public", - "reinterpret_cast", "register", + "reinterpret_cast", "return", "short", "signed", @@ -838,9 +838,9 @@ "typedef", "typeid", "typename", - "using", "union", "unsigned", + "using", "virtual", "void", "volatile", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/testprogs/Makefile new/kdbg-2.5.6/kdbg/testprogs/Makefile --- old/kdbg-2.5.5/kdbg/testprogs/Makefile 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/testprogs/Makefile 2016-10-09 11:25:15.000000000 +0200 @@ -52,7 +52,7 @@ g++ -o $@ $(CXXFLAGS) $^ templates: templates.cpp - g++ -o $@ $(CXXFLAGS) $^ + g++ -std=c++0x -o $@ $(CXXFLAGS) $^ testfile: testfile.cpp g++ -o $@ $(CXXFLAGS) $^ $(QT3INC) $(QT3LIB) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/testprogs/multibrkpt.cpp new/kdbg-2.5.6/kdbg/testprogs/multibrkpt.cpp --- old/kdbg-2.5.5/kdbg/testprogs/multibrkpt.cpp 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/testprogs/multibrkpt.cpp 2016-10-09 11:25:15.000000000 +0200 @@ -14,6 +14,9 @@ void PrintV() { cout << __func__ << " val=" << val << endl; } + virtual void PrintName(int,int) const { + cout << __func__ << endl; + } }; struct MostDerived : Templated<int>, Templated<double> @@ -28,10 +31,26 @@ Templated<int>::PrintV(); Templated<double>::PrintV(); } + virtual void PrintName(int,int) const { + cout << __func__ << endl; + } }; int main() { MostDerived bothobj; + + // test "this adjustment" + void (Templated<int>::*pmf1)(); + void (Templated<double>::*pmf2)(); + void (MostDerived::*pmf3)(); + void (MostDerived::*pmf4)(int,int) const; + pmf1 = static_cast<void (Templated<int>::*)()>(&MostDerived::PrintV); + // the following has a non-trivial "this adjustment" + pmf2 = static_cast<void (Templated<double>::*)()>(&MostDerived::PrintV); + pmf3 = &Templated<double>::PrintV; + pmf4 = &Templated<double>::PrintName; + bothobj.PrintV(); + (bothobj.*pmf4)(2, -5); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/testprogs/templates.cpp new/kdbg-2.5.6/kdbg/testprogs/templates.cpp --- old/kdbg-2.5.5/kdbg/testprogs/templates.cpp 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/testprogs/templates.cpp 2016-10-09 11:25:15.000000000 +0200 @@ -87,6 +87,15 @@ f(s); } +template<class... Args> +void varargs(const char* sep, Args&&... args) +{ + long vals[] = { args... }; + for (auto v: vals) + cout << v << sep; + cout << endl; +} + int main() { S s1, s2; @@ -114,4 +123,6 @@ templS<int> tSi; (tSi.*pm2)(1); tSi.operator<(1); + + varargs(" : ", 1, short(-2), 4U, '3'); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg/testprogs/testfile.cpp new/kdbg-2.5.6/kdbg/testprogs/testfile.cpp --- old/kdbg-2.5.5/kdbg/testprogs/testfile.cpp 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg/testprogs/testfile.cpp 2016-10-09 11:25:15.000000000 +0200 @@ -38,9 +38,10 @@ Dl(int r); virtual int f(int x); int operator()(const QString& x, int& y) const; - operator const char*() { return 0; } + virtual operator const char*() const { return 0; } operator PtrFunc*(); void takeACStr(const char* cstr); + double m; }; namespace A { @@ -185,6 +186,8 @@ int n = 83; d1(strref, n); PtrFunc* ppf = d1; + const char* (Dl::*pmf)() const = &Dl::operator const char*; + double (Dl::*pmv) = &Dl::m; d1.takeACStr(globarstr); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/kdbg.spec new/kdbg-2.5.6/kdbg.spec --- old/kdbg-2.5.5/kdbg.spec 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/kdbg.spec 2016-10-09 11:25:15.000000000 +0200 @@ -49,10 +49,8 @@ make DESTDIR=$RPM_BUILD_ROOT install cd $RPM_BUILD_ROOT -find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > \ - $RPM_BUILD_DIR/file.list.%{name} find . -type f | sed -e 's,^\.,\%attr(-\,root\,root) ,' \ - -e '/\/config\//s|^|%config|' >> \ + -e '/\/config\//s|^|%config|' > \ $RPM_BUILD_DIR/file.list.%{name} find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> \ $RPM_BUILD_DIR/file.list.%{name} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/cs.po new/kdbg-2.5.6/po/cs.po --- old/kdbg-2.5.5/po/cs.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/cs.po 2016-10-09 11:25:15.000000000 +0200 @@ -318,7 +318,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/da.po new/kdbg-2.5.6/po/da.po --- old/kdbg-2.5.5/po/da.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/da.po 2016-10-09 11:25:15.000000000 +0200 @@ -321,7 +321,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/de.po new/kdbg-2.5.6/po/de.po --- old/kdbg-2.5.5/po/de.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/de.po 2016-10-09 11:25:15.000000000 +0200 @@ -320,8 +320,8 @@ msgstr "Ein Debugger" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" -msgstr "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" +msgstr "(c) 1998-2016 Johannes Sixt" #: main.cpp:31 msgid "Johannes Sixt" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/es.po new/kdbg-2.5.6/po/es.po --- old/kdbg-2.5.5/po/es.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/es.po 2016-10-09 11:25:15.000000000 +0200 @@ -323,7 +323,7 @@ msgstr "Un depurador" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/fr.po new/kdbg-2.5.6/po/fr.po --- old/kdbg-2.5.5/po/fr.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/fr.po 2016-10-09 11:25:15.000000000 +0200 @@ -327,7 +327,7 @@ msgstr "Un débogueur" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/hr.po new/kdbg-2.5.6/po/hr.po --- old/kdbg-2.5.5/po/hr.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/hr.po 2016-10-09 11:25:15.000000000 +0200 @@ -320,8 +320,8 @@ msgstr "Debuger" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" -msgstr "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" +msgstr "(c) 1998-2016 Johannes Sixt" #: main.cpp:31 msgid "Johannes Sixt" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/hu.po new/kdbg-2.5.6/po/hu.po --- old/kdbg-2.5.5/po/hu.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/hu.po 2016-10-09 11:25:15.000000000 +0200 @@ -320,7 +320,7 @@ msgstr "Nyomkövető" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/it.po new/kdbg-2.5.6/po/it.po --- old/kdbg-2.5.5/po/it.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/it.po 2016-10-09 11:25:15.000000000 +0200 @@ -454,7 +454,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/ja.po new/kdbg-2.5.6/po/ja.po --- old/kdbg-2.5.5/po/ja.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/ja.po 2016-10-09 11:25:15.000000000 +0200 @@ -322,7 +322,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/kdbg.pot new/kdbg-2.5.6/po/kdbg.pot --- old/kdbg-2.5.5/po/kdbg.pot 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/kdbg.pot 2016-10-09 11:25:15.000000000 +0200 @@ -312,7 +312,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/nb.po new/kdbg-2.5.6/po/nb.po --- old/kdbg-2.5.5/po/nb.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/nb.po 2016-10-09 11:25:15.000000000 +0200 @@ -321,7 +321,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/nn.po new/kdbg-2.5.6/po/nn.po --- old/kdbg-2.5.5/po/nn.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/nn.po 2016-10-09 11:25:15.000000000 +0200 @@ -323,7 +323,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/pl.po new/kdbg-2.5.6/po/pl.po --- old/kdbg-2.5.5/po/pl.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/pl.po 2016-10-09 11:25:15.000000000 +0200 @@ -320,7 +320,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/pt.po new/kdbg-2.5.6/po/pt.po --- old/kdbg-2.5.5/po/pt.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/pt.po 2016-10-09 11:25:15.000000000 +0200 @@ -314,7 +314,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/ro.po new/kdbg-2.5.6/po/ro.po --- old/kdbg-2.5.5/po/ro.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/ro.po 2016-10-09 11:25:15.000000000 +0200 @@ -315,7 +315,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/ru.po new/kdbg-2.5.6/po/ru.po --- old/kdbg-2.5.5/po/ru.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/ru.po 2016-10-09 11:25:15.000000000 +0200 @@ -317,7 +317,7 @@ msgstr "Отладчик" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/sk.po new/kdbg-2.5.6/po/sk.po --- old/kdbg-2.5.5/po/sk.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/sk.po 2016-10-09 11:25:15.000000000 +0200 @@ -317,7 +317,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/sr.po new/kdbg-2.5.6/po/sr.po --- old/kdbg-2.5.5/po/sr.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/sr.po 2016-10-09 11:25:15.000000000 +0200 @@ -321,7 +321,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/sv.po new/kdbg-2.5.6/po/sv.po --- old/kdbg-2.5.5/po/sv.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/sv.po 2016-10-09 11:25:15.000000000 +0200 @@ -321,7 +321,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/tr.po new/kdbg-2.5.6/po/tr.po --- old/kdbg-2.5.5/po/tr.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/tr.po 2016-10-09 11:25:15.000000000 +0200 @@ -322,7 +322,7 @@ msgstr "" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdbg-2.5.5/po/zh_CN.po new/kdbg-2.5.6/po/zh_CN.po --- old/kdbg-2.5.5/po/zh_CN.po 2015-02-22 20:54:42.000000000 +0100 +++ new/kdbg-2.5.6/po/zh_CN.po 2016-10-09 11:25:15.000000000 +0200 @@ -319,7 +319,7 @@ msgstr "一个基于GDB的图形界面调试器" #: main.cpp:27 -msgid "(c) 1998-2015 Johannes Sixt" +msgid "(c) 1998-2016 Johannes Sixt" msgstr "" #: main.cpp:31