Strict aliasing and allocation functions

Carsten Steger
Thu Apr 8 13:47:00 GMT 2004

We have a lot of code lying around where memory allocation is
encapsulated in functions that return error values as ints and
return the allocated memory through a void **.  A little example
that shows the gist of the code is as follows:

#include <stdlib.h>
#include <stdio.h>

int alloc(size_t n, void **p)
  void *a;

  a = malloc(n);
  *p = a;
  return a == NULL;

int main(void)
  int *a, res;

  res = alloc(10,(void **)&a);

  return 0;

Unfortunately, from gcc 3.3 onwards, this code generates the
following warning:

gcc -O3 -Wall -o alloc alloc.c
alloc.c: In function `main':
alloc.c:18: warning: dereferencing type-punned pointer will break
strict-aliasing rules

Is there any way to prevent the warning without major changes to
the code (i.e., without substantial changes to the signature of
alloc)?  In other words, is there a way to tell gcc to treat
the returned pointer p in the same manner as the pointer a
returned by malloc, for which no type-punning warning is

Cheers, Carsten

More information about the Gcc-help mailing list