brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · d7b3c7c Raw
89 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -verify %s2// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -analyzer-output=plist-multi-file %s -o %t.plist3// RUN: %normalize_plist <%t.plist | diff -ub %S/Inputs/expected-plists/plist-macros.cpp.plist -4 5 6typedef __typeof(sizeof(int)) size_t;7void *malloc(size_t);8 9#define mallocmemory int *x = (int*)malloc(12);10void noteOnMacro(int y) {11  y++;12  y--;13  mallocmemory14  y++; 15  y++;16  delete x; // expected-warning {{Memory allocated by 'malloc()' should be deallocated by 'free()', not 'delete'}}17}18 19void macroIsFirstInFunction(int y) {20  mallocmemory 21  y++; // expected-warning {{Potential leak of memory pointed to by 'x'}}22}23 24#define checkmacro p==025void macroInExpressionAux(bool b);26int macroInExpression(int *p, int y) {;27  y++;28  macroInExpressionAux(checkmacro);29 30  return *p; // expected-warning {{Dereference of null pointer}}31}32 33#define noPathNoteMacro y+y34int macroInExpressionNoNote(int *p, int y) {;35  y++;36  if (5 + noPathNoteMacro)37    if (p)38      ;39  return *p; // expected-warning {{Dereference of null pointer}}40}41 42#define macroWithArg(mp) mp==0 43int macroWithArgInExpression(int *p, int y) {;44  y++;45  if (macroWithArg(p))46    ;47  return *p; // expected-warning {{Dereference of null pointer}}48}49 50#define multiNoteMacroWithError \51  if (p) \52    ;\53  *p = 5;54int useMultiNoteMacroWithError(int *p, int y) {;55  y++;56  multiNoteMacroWithError  // expected-warning {{Dereference of null pointer}}57 58  return *p;59}60 61#define multiNoteMacro \62if (p) \63  ;\64if (y) \65  ;66int useMultiNote(int *p, int y) {;67  y++;68  if (p) {}69  multiNoteMacro70 71  return *p; // expected-warning {{Dereference of null pointer}}72}73 74#define CALL_FN(a) null_deref(a)75 76void null_deref(int *a) {77  if (a)78    return;79  *a = 1; // expected-warning {{Dereference of null pointer}}80}81 82void test1() {83  CALL_FN(0);84}85 86void test2(int *p) {87  CALL_FN(p);88}89