This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Optimize causes an error.
- From: John Love-Jensen <eljay at adobe dot com>
- To: LWATCDR <lwatcdr at gmail dot com>
- Cc: MSX to GCC <gcc-help at gcc dot gnu dot org>
- Date: Wed, 11 Jul 2007 10:22:38 -0500
- Subject: Re: Optimize causes an error.
Just a shot in the dark, since I hate the preprocessor, try this:
#ifdef tinx
#error Oh fudge.
#endif
#ifdef size
#error Oh fudge.
#endif
#ifdef position
#error Oh fudge.
#endif
#ifdef getIndexOffset
#error Oh fudge.
#endif
#ifdef getIndexSize
#error Oh fudge.
#endif
#ifdef getDataLength
#error Oh fudge.
#endif
#ifdef fsize
#error Oh fudge.
#endif
#ifdef buffer
#error Oh fudge.
#endif
#ifdef int
#error Oh fudge.
#endif
#ifdef indexPTR_
#error Oh fudge.
#endif
HTH,
--Eljay
On 7/11/07 9:20 AM, "LWATCDR" <lwatcdr@gmail.com> wrote:
> Thanks I had some debugging printf in the code but I deleted them from
> my post to make it a little less messy but yours where better.
> This is kind of odd in that it looks like tinx is changing at random
> during execution.
>
> 4 := (0 - 0) + 40 := 4 < 0
> 0 := testtran: ../PPDict1.cpp:65: virtual void PPDict1::getData(int,
> int, unsigned char*): Assertion `tinx >= 0' failed.
>
> As you can see tinx is set to the value of four in the first statement
> then it throws and Assertion on the next statement! There is no
> assignments happening between the two statements.
>
> On 7/11/07, John Love-Jensen <eljay@adobe.com> wrote:
>> Here's what I'd do... first grade debugging. Add in these diagnostic lines:
>>
>> void PPDict1::getData(int position, int size, unsigned char *buffer) {
>> int fsize = getDataLength();
>> if ((position + size) > fsize) {
>> memset(buffer, 0, size);
>> return;
>> }
>> int tinx=(position-getIndexOffset())+size;
>>
>> // Which of these things has the unexpected value?
>> assert(tinx >= 0);
>> assert(getIndexSize() >= 0);
>> assert(getIndexOffset() >= 0);
>> bool const haveMoreTinx = tinx < getIndexSize();
>> bool const isPtrNonZero = indexPTR_ != 0;
>> std::cerr << tinx << " := (" << position << " - "
>> << getIndexOffset() << ") + " << size;
>> std::cerr << haveMoreTinx << " := " << tinx << " < " << getIndexSize()
>> << '\n';
>> std::cerr << isPtrNonZero << " := " << indexPtr_ << " != 0\n";
>> std::cerr << haveMoreTinx << " && " << isPtrNonZero << '\n';
>>
>> if((tinx<getIndexSize())&&(indexPTR_!=0)){
>> inxcount_++;
>> void * tPtr=indexPTR_+position-getIndexOffset();
>> memcpy(buffer, tPtr, size);
>> }else{
>> dictStream_.seekg(position);
>> dictStream_.read((char *)buffer, size);
>> profcount_++;
>> }
>> }
>>
>> HTH,
>> --Eljay
>>
>>