//===-- main.cpp ------------------------------------------------*- C++ -*-===// //// //// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. //// See https://llvm.org/LICENSE.txt for license information. //// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception //// ////===----------------------------------------------------------------------===// // const int size = 5; #include #include #include void func(int *ptr) { int *tmp; #if defined __GNUC__ && !defined __INTEL_COMPILER __builtin___bnd_store_ptr_bounds ((void**)&ptr, ptr); #endif tmp = ptr + size - 1; #if defined __GNUC__ && !defined __INTEL_COMPILER __builtin___bnd_store_ptr_bounds ((void**)&tmp, tmp); #endif tmp = (int*)0x2; // Break 2. return; // Break 3. } int main(int argc, char const *argv[]) { // This call returns 0 only if the CPU and the kernel support // Intel(R) Memory Protection Extensions (Intel(R) MPX). if (prctl(PR_MPX_ENABLE_MANAGEMENT, 0, 0, 0, 0) != 0) return -1; int* a = (int *) calloc(size, sizeof(int)); #if defined __GNUC__ && !defined __INTEL_COMPILER __builtin___bnd_store_ptr_bounds ((void**)&a, a); #endif func(a); // Break 1. free(a); // Break 4. return 0; }