[Bug 721531]

Rguenth 721531 at bugs.launchpad.net
Thu May 26 08:20:22 UTC 2011


There are several places in the compiler where we assume DECL_ALIGN
constraints the lower bits of the address of the DECL.

See several similar bugs in the past (PR47239 comes to my mind).

fold-const.c:get_pointer_modulus_and_residue looks suspicious to me here,
so you might want to try

Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c    (revision 174266)
+++ gcc/fold-const.c    (working copy)
@@ -9219,7 +9219,8 @@ get_pointer_modulus_and_residue (tree ex
   *residue = 0;
 
   code = TREE_CODE (expr);
-  if (code == ADDR_EXPR)
+  if (code == ADDR_EXPR
+      && TREE_CODE (TREE_OPERAND (expr, 0)) != FUNCTION_DECL)
     {
       unsigned int bitalign;
       bitalign = get_object_alignment_1 (TREE_OPERAND (expr, 0), residue);

-- 
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/721531

Title:
  [armel] gcc computes wrong address for main() at build time

Status in The GNU Compiler Collection:
  New
Status in Linaro GCC:
  Triaged
Status in “gcc-4.5” package in Ubuntu:
  Triaged
Status in “gcc-4.5” source package in Natty:
  Won't Fix
Status in “gcc-4.5” source package in Oneiric:
  Triaged

Bug description:
  Binary package hint: gcc-4.5

  During the debugging of mono, we found a confirmed tool chain
  regression and isolated it down to a testcase:

  Test code:

  void main() {
          void *p = main;
          if ((int)p & 1) printf ("HIT!\n"); 
  }

  Output:

  mcasadevall at risingsun:~/tmp$ gcc  -g test.c 
  test.c: In function 'main':
  test.c:3:18: warning: incompatible implicit declaration of built-in function 'printf'
  mcasadevall at risingsun:~/tmp$ ./a.out 
  HIT!

  mcasadevall at risingsun:~/tmp$ gcc  -g -O2 test.c 
  test.c: In function 'main':
  test.c:3:18: warning: incompatible implicit declaration of built-in function 'printf'
  mcasadevall at risingsun:~/tmp$ ./a.out 
  mcasadevall at risingsun:~/tmp$ 

  Doesn't occur with gcc-4.4.

  Additional comments from #monodev:
  16:26:58 < vargaz> NCommander: it seems to think function addresses on arm 
                     have their lowest bit set to 0, which is not true for 
                     thumb.




More information about the foundations-bugs mailing list