//===-- main.cpp ------------------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include <exception>

struct inner
{
    int var_d;
};

struct my_type
{
    int var_a;
    char var_b;
    struct inner inner_;
};

int
local_int_test(void)
{
    int a = 10, b = 20;
    return 0; // BP_local_int_test
}

int
local_int_test_with_args(int c, int d)
{
    int a = 10, b = 20;
    return 0; // BP_local_int_test_with_args
}

int
local_struct_test(void)
{
    struct my_type var_c;
    var_c.var_a = 10;
    var_c.var_b = 'a';
    var_c.inner_.var_d = 30;
    return 0; // BP_local_struct_test
}

int local_struct_test_with_args(struct my_type var_e)
{
    struct my_type var_c;
    var_c.var_a = 10;
    var_c.var_b = 'a';
    var_c.inner_.var_d = 30;
    return 0; // BP_local_struct_test_with_args
}

int
local_array_test(void)
{
    int array[3];
    array[0] = 100;
    array[1] = 200;
    array[2] = 300;
    return 0; // BP_local_array_test
}

int
local_array_test_with_args(int* other_array)
{
    int array[3];
    array[0] = 100;
    array[1] = 200;
    array[2] = 300;
    return 0; // BP_local_array_test_with_args
}

int
local_pointer_test(void)
{
    const char *test_str = "Rakaposhi";
    int var_e = 24;
    int *ptr = &var_e;
    return 0; // BP_local_pointer_test
}

int
local_pointer_test_with_args(const char *arg_str, int *arg_ptr)
{
    const char *test_str = "Rakaposhi";
    int var_e = 24;
    int *ptr = &var_e;
    return 0; // BP_local_pointer_test_with_args
}

int do_tests_with_args()
{
    local_int_test_with_args(30, 40);

    struct my_type var_e;
    var_e.var_a = 20;
    var_e.var_b = 'b';
    var_e.inner_.var_d = 40;
    local_struct_test_with_args(var_e);

    int array[3];
    array[0] = 400;
    array[1] = 500;
    array[2] = 600;
    local_array_test_with_args(array);

    const char *test_str = "String";
    int var_z = 25;
    int *ptr = &var_z;
    local_pointer_test_with_args(test_str, ptr);

    return 0;
}

void catch_unnamed_test()
{
    try
    {
        int i = 1, j = 2;
        throw std::exception(); // BP_catch_unnamed
    }
    catch(std::exception&)
    {
    }
}

int
main(int argc, char const *argv[])
{
    local_int_test();
    local_struct_test();
    local_array_test();
    local_pointer_test();
    catch_unnamed_test();

    do_tests_with_args();
    return 0;
}
