// weak_alias_test_main.cc -- test weak aliases for gold

// Copyright 2008 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.

// This file is part of gold.

// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.

#include <assert.h>

// Defined in both weak_alias_test_1.cc and weak_alias_test_2.cc, but
// we should get the one in weak_alias_test_1.cc.
extern int weak_symbol;

// Defined in weak_alias_test_2.cc.
extern int strong_symbol;

// weak_aliased is an alias for this.
int strong_aliased = 3;

// Defined as a weak alias in weak_alias_test_1.cc.
int weak_aliased_2 = 6;

// Defined in weak_alias_test_1.cc
extern int strong_aliased_3;
extern int weak_aliased_4;

extern bool t1();

int
main()
{
  // weak_symbol should come from weak_alias_test_3.cc.
  assert(weak_symbol == 4);

  // strong_symbol should come from weak_alias_test_2.cc.
  assert(strong_symbol == 2);

  // strong_aliased should come from this file, above.
  assert(strong_aliased == 3);

  // weak_aliased_2 should come from this file, above.
  assert(weak_aliased_2 == 6);

  // strong_aliased_3 should come from weak_alias_test_1.cc.
  assert(strong_aliased_3 == 7);

  // weak_aliased_4 should come from weak_alias_test_1.cc.
  assert(weak_aliased_4 == 8);

  // Make sure the symbols look right from a shared library.
  assert(t1());
}
