[Bug 910363] Re: miscompile writing to bitfield at -Os

dn 910363 at bugs.launchpad.net
Thu Jan 5 08:33:39 UTC 2012


To be more specific. These two member variables are at offset 0x8:

unsigned ID : 8;
unsigned SubclassData : 24;

When setSubclassData() isn't inlined, it's called with the address of
'SubclassData' in %rdi...:

   0x00007ffff76d684f <+71>:	lea    0x9(%rdi),%r12
   0x00007ffff76d6853 <+75>:	or     $0x1,%esi
   0x00007ffff76d6856 <+78>:	mov    %r12,%rdi
   0x00007ffff76d6859 <+81>:	callq  0x7ffff76d6774 <llvm::Type::setSubclassData(unsigned int)>

...but then, it writes more than 24 bits to that address, writing zeroes
into the next member:

   0x00007ffff76d6774 <+0>:	mov    %esi,%eax
   0x00007ffff76d6776 <+2>:	sub    $0x8,%rsp
   0x00007ffff76d677a <+6>:	and    $0xffffff,%eax
   0x00007ffff76d677f <+11>:	cmp    %esi,%eax
   0x00007ffff76d6781 <+13>:	mov    %eax,(%rdi) # corruption

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-4.5 in Ubuntu.
https://bugs.launchpad.net/bugs/910363

Title:
  miscompile writing to bitfield at -Os

Status in “gcc-4.5” package in Ubuntu:
  New

Bug description:
  The attached preprocessed file was extracted out of a file from LLVM. When it was compiled by g++-4.5 at -Os, and LLVM's test suite was run, it resulted in the assert in PointerType's constructor firing:
  llvm::PointerType::PointerType(llvm::Type*, unsigned int): Assertion `oldNCT == NumContainedTys && "bitfield written out of bounds?"' failed.

  This was the invocation I used:
  g++-4.5 -Os -fPIC -g -pedantic -Wno-long-long -fno-exceptions -o lib/VMCore/CMakeFiles/LLVMCore.dir/Type2.cpp.o -c Type2.ii

  Further details here:
  http://llvm.org/PR11652

  ProblemType: Bug
  DistroRelease: Ubuntu 11.04
  Package: g++-4.5 4.5.2-8ubuntu4
  Uname: Linux 3.1.0-custom x86_64
  Architecture: amd64
  Date: Tue Dec 27 22:11:40 2011
  InstallationMedia: Ubuntu 11.04 "Natty Narwhal" - Release amd64 (20110427.1)
  ProcEnviron:
   LANGUAGE=en_US:en
   PATH=(custom, user)
   LANG=en_US.UTF-8
   SHELL=/bin/bash
  SourcePackage: gcc-4.5
  UpgradeStatus: No upgrade log present (probably fresh install)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.5/+bug/910363/+subscriptions




More information about the foundations-bugs mailing list