[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