On Wed, 02 May 2012 23:11:20 -0500 "David C. Rankin" <drankinatty@...> wrote: > On 05/02/2012 09:00 PM, David C. Rankin wrote: > > Loaded symbols for /lib/libnss_files.so.2 > > 0x00007f5859c98200 in isSpace () from /opt/tqt3/lib/libtqt-mt.so.3 > > (gdb) bt > > #0 0x00007f5859c98200 in isSpace () > > from /opt/tqt3/lib/libtqt-mt.so.3 #1 0x00007f585a0a6a6c in > > TQChar::isSpace (this=0x1c9b010) at tools/qstring.cpp:475 #2 > > 0x00007f5853f5ffc1 in KateRenderer::textWidth (this=0x1aa9210, > > textLine=..., startcol=0, maxwidth=817, needWrap=0x7fffc9605ea8, > > endX=0x7fffc9605e9c) > > at /build/src/tdelibs/kate/part/katerenderer.cpp:806 #3 > > 0x00007f5853f41674 in KateViewInternal::range > > (this=this@entry=0x1a66ce0, realLine=realLine@entry=0, > > previous=previous@entry=0x0) > > at /build/src/tdelibs/kate/part/kateviewinternal.cpp:1331 #4 > > 0x00007f5853f42b32 in KateViewInternal::range > > (this=this@entry=0x1a66ce0, realLine=0, viewLine=viewLine@entry=1) > > at /build/src/tdelibs/kate/part/kateviewinternal.cpp:1418 > > I guess the questions now becomes, given all of the backtraces and > strace information we have been able to collect, where does it point > us to begin? IIRC, Tim's bet is on tdelibs. What about Qt3? tdelibs > more probable? Why? > > As for looking at the code and looking for code that may violate a > gcc coding standard - what would you look for? > > Out of all the backtraces I've looked at, the common entry seems to > be: > > > #2 0x00007f5853f5ffc1 in KateRenderer::textWidth (this=0x1aa9210, > > textLine=..., startcol=0, maxwidth=817, needWrap=0x7fffc9605ea8, > > endX=0x7fffc9605e9c) > > at /build/src/tdelibs/kate/part/katerenderer.cpp:806 > > Which, given the symptoms (editor OK until you paste or cursor down > to a line that wraps), seems to point to > tdelibs/kate/part/katerenderer.cpp:806 > > if (unicode[z].isSpace()) > > Is there something violative of some gcc standard in the way .isSpace > is called? > > What about the TOChar::isSpace call at tools/qstring.cpp:475? > > return ::isSpace( *this ); > > Same question - anything apparently wrong with this? There were a log > of gcc47 FTBFS surrounding needing to add 'this->' to distinguish > who's function, etcc.. what being used in the multiple declaration > and no forward declaration error. Could one of those exist that gcc > doesn't flag, but confuses the execution of the code of whose this is > the right 'this' for the program to perform without crashing. > > Many times looking at the code, especially where templates were used, > gcc47 requires the explicit this-> where there are several templates > used side by side. Those areas look like a likely place for gcc to > get confused with which template is the 'this' template the compiler > wants. > > That's just ramblings at this point. We will actually need somebody > to browse the files that have veen flagged in the backraces to look > at those areas and see if anything stands out as being noncompliant. > I could look all day at the same file and not be able to tell > compliant/noncompliant from a hole in the ground. So I won't > volunteer and give anyone any unjustified hope of me actually picking > something out. > > What is the best approach here? 1) This seems to be an infinite loop in katerenderer.cpp 2) The z which governs the loop isn't changed inside the loop* so it looks like a code generation bug. Can you do $ gcc -S -fverbose-asm -I??? <FLAGS> katerenderer.cpp where I??? are the include paths needed to make the file compile, FLAGS are the CXXFLAGS you usually use to compile and then send katerenderer.s to the list ? *If somebody isn't convinced they can apply this patch: diff --git a/kate/part/katerenderer.cpp b/kate/part/katerenderer.cpp index 48b73d7..bbe5426 100644 --- a/kate/part/katerenderer.cpp +++ b/kate/part/katerenderer.cpp @@ -790,9 +790,10 @@ uint KateRenderer::textWidth(const KateTextLine::Ptr &textLine, uint startcol, u const TQChar *unicode = textLine->text(); const TQString &textString = textLine->string(); - uint z = startcol; - for (; z < len; z++) + uint zz = startcol; + for (; zz < len; zz++) { + const uint z = zz; KateAttribute* a = attribute(textLine->attribute(z)); int width = a->width(*fs, textString, z, m_tabWidth); Q_ASSERT(width);