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