[Coin-discuss] Bug Report in PackedVectorBase
Leo Lopes
leo at sie.arizona.edu
Mon Oct 6 13:57:34 EDT 2003
Thanks! We'll test it this week.
Cheers,
Leo.
Laszlo Ladanyi wrote:
>I have moved things a bit around, now things should work with MSVC 2003 as
>well.
>
>--Laci
>
>On Sun, 5 Oct 2003, Leo Lopes wrote:
>
>
>
>>Hi Laszlo,
>>
>> I think I started my msg incorrectly, by even bringing up whether or
>>not compiler A or B was at fault. I apologize for that. The question you
>>brought up about how to deal with ANY compiler's bugs is an important
>>one. My 2c on that is to treat each situation individually. The argument
>>for that approach is that these days, almost always all that is required
>>are very simple changes. Furthermore, the result is often code
>>improvement, and sometimes when you are lucky even design improvements.
>>At least that has been my experience.
>>
>> For this particular issue, I agree with your solution. I think that
>>the binaryOp methods as they are now don't belong in PackedVectorBase.
>>My (strictly academic, I admit) simplest arguments for that are: a base
>>class should not have any knowledge about a derived class; and a method
>>should not be used in a file if it isn't defined in that file or in a
>>file included from that file.
>>
>> BTW, Kipp Martin tells me that with the changes I sent you COIN
>>compiles cleanly and works on MSVC 03.
>>
>>
>>Cheers,
>>Leo.
>>
>>Laszlo Ladanyi wrote:
>>
>>
>>
>>>Hi Leo,
>>>
>>>Actually, I believe that MSVC 2003 is at fault. The binaryOp methods are
>>>templated methods and the compiler has no business in compiling them until it
>>>knows the template arguments. What I think is that MSVC 2003 tries to be
>>>clever and precompile those parts of the method that do not depend on the
>>>template argument. But that's a problem with the compiler. Also, Sun's CC,
>>>IBM's xlC, HP's aCC compile the code without any problems...
>>>
>>>This raises the issue of how do we deal with bugs in Microsoft's compilers?
>>>(The question is valid regardless of whether MSVC 2003 is at fault now or
>>>not.) To get wide audience, we need them to compile our code. But that would
>>>be sort of letting the bully to win. (The bully's compiler is faster, but only
>>>because it cheats on the rules, but we can't do anything about it, so we
>>>conform...)
>>>
>>>In this particular case moving binatyOp into the PackedVector class is not the
>>>right solution either. If we did that we couldn't use ShallowPackedVectors in
>>>binaryOps.
>>>
>>>A possible solution would be to move binaryOp into CoinPackedVector.hpp as a
>>>templated function (not a method in PackedVector. This actually makes sense,
>>>after all, the does function return a PackedVector...
>>>
>>>What do people think? (On both questions.)
>>>
>>>--Laci
>>>
>>>On Sat, 4 Oct 2003, Leo Lopes wrote:
>>>
>>>
>>>
>>>
>>>
>>>>Dear Laszlo,
>>>>
>>>> I was having trouble compiling the basic COIN library under the newest
>>>>VS .net (I know, I know), and I noticed you were the last to update
>>>>CoinPackedVectorBase and CoinPackedVector. I'd like to point out a
>>>>feature of that code that is causing a problem. It is on lines 164, 182,
>>>>and 200, and the couple of lines following each case. MSVC 2003
>>>>complains about this code even though gcc and the previous MSVC don't,
>>>>and I think at least this time MSVC 2003 is right.
>>>>
>>>> The problem is the following: when compiling PackedVectorBase, a
>>>>compiler has no way of knowing that PackedVector has a
>>>>setTestForDuplicateIndex method. It doesn't know, at this point, that
>>>>PackedVector is a child of PackedVectorBase. My guess is that the code
>>>>as it is now only works in gcc and the old MSVC because of the mechanism
>>>>that gcc and MSVC use to implement templates.
>>>>
>>>> I changed PackedVectorBase and PackedVector so that any references to
>>>>PackedVector are removed from its parent, PackedVectorBase. This
>>>>involved moving the binaryOp functions to PackedVector and changing some
>>>>signatures. This allowed the Coin library ato compile cleanly under MSVC
>>>>and gcc and Clp to compile cleanly under gcc. I haven't tried other
>>>>libraries/compilers combinations yet.
>>>>
>>>> The sources I am sending you are not changes of the absolute newest
>>>>versions in the CVS. However the same holds true of those versions.
>>>>
>>>>Cheers,
>>>>Leo.
>>>>
>>>>Laszlo Ladanyi wrote:
>>>>
>>>>
>>>>
>>>>
>>>>>I think I caught all memory problems. At least now valgrind is quiet. It
>>>>>wasn't too bad, various pointers got deleted multiple times. I think there are
>>>>>memory leaks left. I'll try to deal with them over the weekend or early next
>>>>>week.
>>>>>
>>>>>All the changes are committed.
>>>>>
>>>>>Thanks for the bug report!
>>>>>--Laci
>>>>>
>>>>>
>>>>>_______________________________________________
>>>>>Coin-discuss mailing list
>>>>>Coin-discuss at www-124.ibm.com
>>>>>http://www-124.ibm.com/developerworks/oss/mailman/listinfo/coin-discuss
>>>>>
>>>>>
>>>>>
>>>>>
>>>>--
>>>>=======================================================================
>>>>Leonardo B. Lopes leo at sie.arizona.edu
>>>>Visiting Assistant Professor (520)626-1780
>>>>SIE - University of Arizona
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>--
>>=======================================================================
>>Leonardo B. Lopes leo at sie.arizona.edu
>>Visiting Assistant Professor (520)626-1780
>>SIE - University of Arizona
>>
>>
>>
>>
>>
>
>_______________________________________________
>Coin-discuss mailing list
>Coin-discuss at www-124.ibm.com
>http://www-124.ibm.com/developerworks/oss/mailman/listinfo/coin-discuss
>
>
--
=======================================================================
Leonardo B. Lopes leo at sie.arizona.edu
Visiting Assistant Professor (520)626-1780
SIE - University of Arizona
More information about the Coin-discuss
mailing list