malloc.cpp revision aca0ac58d2ae80d764e3832456667d7322445e0c
14b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaks// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.deadcode.UnreachableCode,experimental.core.CastSize,unix.Malloc -analyzer-store=region -verify %s
24b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaks
34b81e742c8d23600e4244d69f20322e3535e3d86Anna Zakstypedef __typeof(sizeof(int)) size_t;
44b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaksvoid *malloc(size_t);
54b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaksvoid free(void *);
64b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaksvoid *realloc(void *ptr, size_t size);
74b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaksvoid *calloc(size_t nmemb, size_t size);
84b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaks
94b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaks// Test for radar://11110132.
104b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaksstruct Foo {
114b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaks    mutable void* m_data;
124b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaks    Foo(void* data) : m_data(data) {}
134b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaks};
144b81e742c8d23600e4244d69f20322e3535e3d86Anna ZaksFoo aFunction() {
154b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaks    return malloc(10);
164b81e742c8d23600e4244d69f20322e3535e3d86Anna Zaks}
17aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaks
18aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaks// Assume that functions which take a function pointer can free memory even if
19aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaks// they are defined in system headers and take the const pointer to the
20aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaks// allocated memory. (radar://11160612)
21aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaks// Test default parameter.
22aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaksint const_ptr_and_callback_def_param(int, const char*, int n, void(*)(void*) = 0);
23aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaksvoid r11160612_3() {
24aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaks  char *x = (char*)malloc(12);
25aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaks  const_ptr_and_callback_def_param(0, x, 12);
26aca0ac58d2ae80d764e3832456667d7322445e0cAnna Zaks}
27