[llvm-dev] Question about 'isUnsignedDIType' function on DwarfUnit.cpp

jingu kang via llvm-dev llvm-dev at lists.llvm.org
Fri Apr 1 03:59:06 PDT 2016


Hi Paul,

Ah... You are right! It is my mistake. I am implementing new backend
on llvm and clang 3.7.0. I thought the mechanism of debugging
information is same between 3.7.0 and trunk. When I look at trunk, it
seems to pass the problem.

I used following example.

int err;

__complex__ int ctest_int (__complex__ int x)
{
   __complex__ int res;
   res = ~x;
   return res;
}

void test_int (void)
{
  __complex__ int res, x;
  x = 1.0 + 2.0i;
  res = ctest_int (x);
  if (res != 1.0 - 2.0i) {
    printf ("test_" "int" " failed\n");
    ++err;
  }
}

When above example is compiled with '-g' option and my target, Codeden
constructs VariableDIE with following DBG_VALUE and DIBasicType.

DBG_VALUE 1, 0, !"res", <!32>; line no:12
!DIBasicType(name: "complex", size: 64, align: 32, encoding: 128)

llvm-3.7.0 tried to add constant value directly and it generated
assertion on 'isUnsignedDIType' function as I mentioned on previous
e-mail. But trunk checks whether there is DBG_VALUE or not. Therefore,
I think trunk could pass the problem.

Thanks,
JinGu Kang

2016-04-01 6:33 GMT+01:00 Robinson, Paul <Paul_Robinson at playstation.sony.com>:
> +llvm-dev which got lost somehow
>
>> -----Original Message-----
>> From: Robinson, Paul
>> Sent: Thursday, March 31, 2016 10:33 PM
>> To: 'jingu kang'
>> Subject: RE: [llvm-dev] Question about 'isUnsignedDIType' function on
>> DwarfUnit.cpp
>>
>>
>>
>> > -----Original Message-----
>> > From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of
>> jingu
>> > kang via llvm-dev
>> > Sent: Thursday, March 31, 2016 4:02 PM
>> > To: llvm-dev
>> > Subject: [llvm-dev] Question about 'isUnsignedDIType' function on
>> > DwarfUnit.cpp
>> >
>> > Hi All,
>> >
>> > I have question about 'isUnsignedDIType' function on
>> > 'llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp'
>> >
>> > When we want to generate object file with dwarf debug format, clang
>> > can generates 'DW_ATE_lo_user' encoding for complex integer type as
>> > follow:
>> >
>> > "clang/lib/CodeGen/CGDebugInfo.cpp"
>> > llvm::DIType *CGDebugInfo::CreateType(const ComplexType *Ty) {
>> > ...
>> >   if (Ty->isComplexIntegerType())
>> >     Encoding = llvm::dwarf::DW_ATE_lo_user;
>> > ...
>> >
>> > There is a assert for DIBasicType's enconding in the
>> > 'isUnsignedDIType' function and it generates assertion for
>> > 'DW_ATE_lo_user'. Is it intended? I think it should not generate
>> > assertion for 'DW_ATE_lo_user' because it comes from  complex integer
>> > type. How do you think about it? If I missed something, please let me
>> > know.
>>
>> I tried compiling the following with -g:
>>   _Complex int foo;
>> I do not see an assertion, I see it producing a DW_TAG_base_type
>> with name "complex" and an encoding of 0x80 (decimal 128).
>> Do you have a sample source file and command line to reproduce the
>> assertion?  Are you using an older compiler?
>> --paulr
>>
>> >
>> > Thanks,
>> > JinGu Kang
>> > _______________________________________________
>> > LLVM Developers mailing list
>> > llvm-dev at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list