[LLVMdev] Seeing a crash with ConstantFP::get
Dale Johannesen
dalej at apple.com
Wed Sep 5 17:16:25 PDT 2007
On Sep 5, 2007, at 5:08 PM, Chuck Rose III wrote:
> Hola Dale,
>
>
>
> I spent some time walking through what’s going on with a friend of
> mine from VStudio. Category is given 2 bits in the APFloat class
> definition. It’s sign extending the enum value for the comparisons
> when it loads it out of the class, so the 2 becomes a -2 and the
> comparison fails. He sent me a piece of code which I might be able
> to use to force the issue. I’ll update when I try that out.
OK. This possibility occurred to me, I checked the C++ standard, and
the code is valid; this is explicitly required to work, and there's
an example.
However VStudio is what it is. I expect expanding the field to 3
bits is good enough. I don't think that will hurt anything.
> Thanks,
>
> Chuck.
>
>
>
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-
> bounces at cs.uiuc.edu] On Behalf Of Chuck Rose III
> Sent: Wednesday, September 05, 2007 2:51 PM
> To: LLVM Developers Mailing List
> Subject: Re: [LLVMdev] Seeing a crash with ConstantFP::get
>
>
>
> It’s in debug. I’m having a look at the assembler it’s producing
> right now and it’s definitely a little odd for what should be a
> simple assignment in zeroSignificand.
>
>
>
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-
> bounces at cs.uiuc.edu] On Behalf Of Dale Johannesen
> Sent: Wednesday, September 05, 2007 2:39 PM
> To: LLVM Developers Mailing List
> Subject: Re: [LLVMdev] Seeing a crash with ConstantFP::get
>
>
>
>
>
> On Sep 5, 2007, at 2:21 PM, Chuck Rose III wrote:
>
>
>
> Hola LLVMers,
>
>
>
> I’m getting a crash when using ConstantFP::get.
>
>
>
> I can repro it by adding one line to the Fibonacci example program:
>
>
>
> int main(int argc, char **argv) {
>
> int n = argc > 1 ? atol(argv[1]) : 24;
>
>
>
> // Create some module to put our function into it.
>
> Module *M = new Module("test");
>
>
>
> // We are about to create the "fib" function:
>
> Function *FibF = CreateFibFunction(M);
>
>
>
> // add the following line
>
> Constant* C = ConstantFP::get(Type::FloatTy,0.0);
>
>
>
>
>
> Can someone verify this? This is on the PC side of my system which
> I build with the VStudio files. I don’t know if the Mac side sees
> this as well, but I’ll try and verify. Seems really odd to have
> something this basic crash me. It came up because the JITter will
> call ConstantFP::get with the GenericValue arguments passed it, but
> the above repro is a lot simpler and is independent of the JITter.
>
>
>
> My call stack looks like this:
>
>
>
> in here it fails this: assert(category == fcNormal ||
> category == fcNaN);
>
> Fibonacci.exe!llvm::APFloat::significandParts() Line
> 360 + 0x39 bytes C++
>
> Fibonacci.exe!llvm::APFloat::zeroSignificand() Line
> 387 + 0x15 bytes C++
>
> I've been working in this area and probably introduced this, but I
> don't see how: zeroSignificand() sets 'category' to fcNormal
> before calling significandParts, so I don't see how that assert
> could be triggered. The call stack looks normal for that source
> line. It doesn't appear on the Mac. Could your compiler be
> misoptimizing the code?
>
>> Fibonacci.exe!llvm::APFloat::APFloat(const
>> llvm::fltSemantics & ourSemantics={...}, unsigned __int64
>> value=1) Line 307 C++
>>
>> Fibonacci.exe!`anonymous
>> namespace'::DenseMapAPFloatKeyInfo::getEmptyKey() Line 277 + 0x11
>> bytes C++
>>
>> Fibonacci.exe!llvm::DenseMap<`anonymous
>> namespace'::DenseMapAPFloatKeyInfo::KeyTy,llvm::ConstantFP
>> *,A0x5b1fa632::DenseMapAPFloatKeyInfo>::getEmptyKey() Line 236 +
>> 0x9 bytes C++
>>
>> Fibonacci.exe!llvm::DenseMap<`anonymous
>> namespace'::DenseMapAPFloatKeyInfo::KeyTy,llvm::ConstantFP
>> *,A0x5b1fa632::DenseMapAPFloatKeyInfo>::init(unsigned int
>> InitBuckets=64) Line 295 + 0x9 bytes C++
>>
>> Fibonacci.exe!llvm::DenseMap<`anonymous
>> namespace'::DenseMapAPFloatKeyInfo::KeyTy,llvm::ConstantFP
>> *,A0x5b1fa632::DenseMapAPFloatKeyInfo>::DenseMap<`anonymous
>> namespace'::DenseMapAPFloatKeyInfo::KeyTy,llvm::ConstantFP
>> *,A0x5b1fa632::DenseMapAPFloatKeyInfo>(unsigned int
>> NumInitBuckets=64) Line 68 C++
>>
>> Fibonacci.exe!
>> llvm::ManagedStatic<llvm::DenseMap<`anonymous
>> namespace'::DenseMapAPFloatKeyInfo::KeyTy,llvm::ConstantFP
>> *,A0x5b1fa632::DenseMapAPFloatKeyInfo> >::LazyInit() Line 72 +
>> 0x24 bytes C++
>>
>> Fibonacci.exe!
>> llvm::ManagedStatic<llvm::DenseMap<`anonymous
>> namespace'::DenseMapAPFloatKeyInfo::KeyTy,llvm::ConstantFP
>> *,A0x5b1fa632::DenseMapAPFloatKeyInfo> >::operator*() Line 55 C++
>>
>> Fibonacci.exe!llvm::ConstantFP::get(const llvm::Type *
>> Ty=0x01b352d8, double V=0.00000000000000000) Line 299 + 0xe
>> bytes C++
>>
>> Fibonacci.exe!main(int argc=1, char * *
>> argv=0x01b35060) Line 99 + 0x13 bytes C++
>>
>> Fibonacci.exe!__tmainCRTStartup() Line 586 + 0x19
>> bytes C
>>
>> Fibonacci.exe!mainCRTStartup() Line 403 C
>>
>>
>>
>> Thanks,
>>
>> Chuck.
>>
>> _______________________________________________
>>
>> LLVM Developers mailing list
>>
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>>
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20070905/fddb1f53/attachment.html>
More information about the llvm-dev
mailing list