41 lines · cpp
1// RUN: %clangxx_scudo -fsized-deallocation %s -o %t2// RUN: %env_scudo_opts=DeleteSizeMismatch=1 %run %t gooddel 2>&13// RUN: %env_scudo_opts=DeleteSizeMismatch=1 not %run %t baddel 2>&1 | FileCheck %s4// RUN: %env_scudo_opts=DeleteSizeMismatch=0 %run %t baddel 2>&15// RUN: %env_scudo_opts=DeleteSizeMismatch=1 %run %t gooddelarr 2>&16// RUN: %env_scudo_opts=DeleteSizeMismatch=1 not %run %t baddelarr 2>&1 | FileCheck %s7// RUN: %env_scudo_opts=DeleteSizeMismatch=0 %run %t baddelarr 2>&18 9// Ensures that the sized delete operator errors out when the appropriate10// option is passed and the sizes do not match between allocation and11// deallocation functions.12 13#include <assert.h>14#include <stdlib.h>15#include <string.h>16 17#include <new>18 19int main(int argc, char **argv) {20 assert(argc == 2);21 if (!strcmp(argv[1], "gooddel")) {22 long long *p = new long long;23 operator delete(p, sizeof(long long));24 }25 if (!strcmp(argv[1], "baddel")) {26 long long *p = new long long;27 operator delete(p, 2);28 }29 if (!strcmp(argv[1], "gooddelarr")) {30 char *p = new char[64];31 operator delete[](p, 64);32 }33 if (!strcmp(argv[1], "baddelarr")) {34 char *p = new char[63];35 operator delete[](p, 64);36 }37 return 0;38}39 40// CHECK: ERROR: invalid sized delete when deallocating address41