[LLVMbugs] [Bug 13513] New: C++ arguments passed by invisible reference have wrong type

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu Aug 2 07:33:32 PDT 2012


http://llvm.org/bugs/show_bug.cgi?id=13513

             Bug #: 13513
           Summary: C++ arguments passed by invisible reference have wrong
                    type
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: kv.bhat at samsung.com
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Hi,
When we compile the below code using clang -

class Obj
{
public:
  Obj ();
  Obj (const Obj &);
  ~Obj ();
  int var;
};

int foo (Obj arg)
{
  arg.var++;
  return arg.var;
}

int main()
{
  Obj obj;

  return 0;    /* initialized */
}

Obj::Obj ()
{
  var = 1;
}

Obj::~Obj ()
{
}

and try to find type of foo in gdb-

(gdb) ptype foo
  type = int (Obj &)

Ideally  type = int (Obj) should have been generated as we are passing by
value.

Similar issue is logged in GCC at 
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33537



When we debug we found that in 

void CGDebugInfo::EmitDeclare(const VarDecl *VD, unsigned Tag,llvm::Value
*Storage,unsigned ArgNo, CGBuilderTy &Builder) function-

if (!Record->hasTrivialCopyConstructor() || !Record->hasTrivialDestructor())

we are creating a DIE with Reference type resulting in the above issue.

If we comment this part Test case and LLVM regression PASS.

Needed input from community why specifically DW_TAG_Reference is being created
here in case we have a user defined destructor or user defined copy constructor
and if this fix can be pushed to trunk.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list