1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - | FileCheck %s
2d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola
3d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola#pragma weak zex
4d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindolaint zex;
5d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola// GCC produces a weak symbol for this because it matches mangled names.
6d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola// Different c++ ABIs may or may not mangle this, so we produce a strong
7d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola// symbol.
8d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola// CHECK: @zex = global i32
9d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola
10d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola#pragma weak foo
11d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindolastruct S {  void foo(); };
12d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindolavoid S::foo() {}
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-LABEL: define {{.*}}void @_ZN1S3fooEv(
14d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola
15d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola#pragma weak zed
16d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindolanamespace bar {  void zed() {} }
1787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-LABEL: define {{.*}}void @_ZN3bar3zedEv(
18d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola
19d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola#pragma weak bah
20d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindolavoid bah() {}
2187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-LABEL: define {{.*}}void @_Z3bahv(
22d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola
23d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola#pragma weak baz
24d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindolaextern "C" void baz() {}
2587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-LABEL: define weak {{.*}}void @baz(
26d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola
27d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola#pragma weak _Z3baxv
28d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindolavoid bax() {}
29d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola// GCC produces a weak symbol for this one, but it doesn't look like a good
30d7a60ad800d64b7c444b26a58e76ec337dbd7bc2Rafael Espindola// idea to expose the mangling to the pragma unless we really have to.
3187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK-LABEL: define {{.*}}void @_Z3baxv(
32