//===-- 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
//
//===----------------------------------------------------------------------===//

#include <cstdlib>
#include <cstring>
#include <string>
#include <fstream>
#include <iostream>

int
product (int x, int y)
{
    int result = x * y;
    return result;
}

int
sum (int a, int b)
{
    int result = a + b;
    return result;
}

int
strange_max (int m, int n)
{
    if (m > n)
        return m;
    else if (n > m)
        return n;
    else
        return 0;
}

int
foo (int i, int j)
{
    if (strange_max (i, j) == i)
        return product (i, j);
    else if (strange_max  (i, j) == j)
        return sum (i, j);
    else
        return product (sum (i, i), sum (j, j));
}

int
main(int argc, char const *argv[])
{

    int array[9];
	memset(array,0,9*sizeof(int));

    array[0] = foo (1238, 78392);
    array[1] = foo (379265, 23674);
    array[2] = foo (872934, 234);
    array[3] = foo (1238, 78392);
    array[4] = foo (379265, 23674);
    array[5] = foo (872934, 234);
    array[6] = foo (1238, 78392);
    array[7] = foo (379265, 23674);
    array[8] = foo (872934, 234);

    return 0;
}
