This isn't specific to optlink or windows.  The same occurs with posix linkers 
as well.  If the symbols were identical,
then there wouldn't be a size mismatch warning.  That the size differs means 
that they aren't.  The key questions are,
what's different and why?

On 2/15/2011 9:38 AM, David Simcha wrote:
> BTW, to deal with annoying errors like this, how hard would it be to compare 
> implementations when a symbol is defined
> multiple times and, if the implementations are identical, just pick one and 
> use it?  Of course I know in the short term
> this is hard b/c OPTLINK isn't translated to C yet, but let's assume longer 
> term that we will have a sane linker codebase.
> 
> On Tue, Feb 15, 2011 at 12:33 PM, David Simcha <[email protected] 
> <mailto:[email protected]>> wrote:
> 
>     Never mind, I got it.  http://d.puremagic.com/issues/show_bug.cgi?id=5592 
>  The thing that made it hard to reproduce
>     was that I was using the wrong array op.  What the heck is the difference 
> between __arrayExpSliceMulSliceAddass_d and
>     __arraySliceExpMulSliceAddass_d anyhow?  From what I can tell, which one 
> gets called depends on the order you write
>     your array op in.  arr1[] += num * arr2[] calls 
> __arrayExpSliceMulSliceAddass_d and arr1[] += arr2[] * num calls
>     __arraySliceExpMulSliceAddass_d .  Isn't multiplication commutative even 
> in inexact floating point arithmetic?  Why
>     two functions?
> 
> 
>     On Tue, Feb 15, 2011 at 12:07 PM, Jason House 
> <[email protected] <mailto:[email protected]>> wrote:
> 
>         The complete linker error with mangled symbol name and the candidate 
> code generating the symbol in the first
>         place is probably enough. At one point, I posted an error message, 
> and Don was able to infer everything else
>         without seeing a line of my code. That might not be the case here, 
> but it's probably the bulk of the needed info.
> 
>         Sent from my iPhone
> 
>         On Feb 15, 2011, at 11:33 AM, David Simcha <[email protected] 
> <mailto:[email protected]>> wrote:
> 
>         > Whenever I use array ops in multi-module projects, I always seem to 
> run into "Previous definition different"
>         linker errors.  This seems to occur when I call the same array op 
> using library function from multiple modules
>         in the same project.  Moving things around to different modules and 
> recompiling always seems to solve them at
>         the expense of uglifying my code.  Unfortunately, this is one of 
> those frustrating bugs that only seems to occur
>         on real-world code, i.e. code that has multiple modules, lots of 
> indirection, libraries, etc.  I can't for the
>         life of me come up with a reduced test case.
>         >
>         > Has anyone else been experiencing similar issues?  Alternatively, 
> can someone with a better mental model of
>         how things work at the binary level please suggest how this bug might 
> be reproduced in a test case that's less
>         than 20 thousand lines of code?  (I find linker bugs very difficult 
> to isolate and file bug reports on because I
>         have no mental model of how things work at that low a level.  My 
> mental model basically only goes down to
>         assembly language, not the process of turning a pile of assembly 
> language files into a working executable or
>         shared library.)
_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals

Reply via email to