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
