blob: 9fcecb87c6cf32a8b0c82fe6d5deacbb6ae9718a [file] [log] [blame]
// Go through at least one of every operation to verify flags are set appropriately...
//--Make sure we can run DSA on it!
//RUN: clang %s -c -emit-llvm -o - | \
//RUN: dsaopt -dsa-bu -dsa-td -disable-output
//H, S, G, R, M
#include <stdlib.h>
//Not touched
int global_a;
//M
int global_b;
//R
int global_c;
//M/R
int global_d;
void func() {
//Don't mod/ref
int stack_a;
//Mod
int * heap_a = malloc(sizeof(int));
//Mod
int stack_b;
int * heap_b = malloc(sizeof(int));
//Ref
int stack_c;
int * heap_c = malloc(sizeof(int));
//Mod/Ref
int stack_d;
int * heap_d = malloc(sizeof(int));
//Mod the b's, ref the c's
stack_b = stack_c;
*heap_b = *heap_c;
global_b = global_c;
//Mod/ref all the d's
stack_d = global_d;
global_d = *heap_d;
*heap_d = stack_d;
free(heap_a);
free(heap_b);
free(heap_c);
free(heap_d);
}