[Bug c/46454] New: Pointer to pointer function parameter handled incorrectly

2010-11-12 Thread taradov at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46454

   Summary: Pointer to pointer function parameter handled
incorrectly
   Product: gcc
   Version: 4.4.5
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: tara...@gmail.com


Exact GCC version: gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)

Program below when compiled with -O2 or higher produces output like:
--- 0x08724018 0x 0x08724008

With -O1 it produces expected output:
--- 0x09917018 0x09917008 0x09917008


#include 
#include 
#include 
#include 

typedef struct List_t
{
  struct List_t *next;
} List_t;

typedef struct Symbol_t
{
  struct Symbol_t *next;
} Symbol_t;

typedef struct First_t
{
  Symbol_t   *set;
} First_t;

static void list_add(void **list, void *element)
{
  ((List_t *)element)->next = NULL;

  if (*list)
  {
List_t *last = *list;
while (last->next)
  last = last->next;
last->next = element;
  }
  else
*list = element;
}

int main(void)
{
  First_t *item;
  Symbol_t *res;

  res = malloc(sizeof(Symbol_t));
  res->next = NULL;

  item = malloc(sizeof(struct First_t));
  item->set = NULL;
  list_add((void *)&item->set, res);

  printf("--- 0x%08lx 0x%08lx 0x%08x\n", item, item->set, res);
  return 0;
}
--

Bug seems to be fixed in 4.6.x branch, but present in 4.4.x and 4.5.x.


[Bug c/46454] Pointer to pointer function parameter handled incorrectly

2010-11-12 Thread taradov at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46454

Alexander Taradov  changed:

   What|Removed |Added

  Component|middle-end  |c

--- Comment #2 from Alexander Taradov  2010-11-12 
19:50:40 UTC ---
(In reply to comment #1)
> I think this has aliasing violations in it.

Yes, my bad.