1c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenberg// RUN: %clang_cc1 -triple i386-pc-linux-gnu -emit-llvm -o - %s | FileCheck -check-prefix=CHECKBASIC %s 2c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenberg// RUN: %clang_cc1 -triple armv7a-eabi -mfloat-abi hard -emit-llvm -o - %s | FileCheck -check-prefix=CHECKCC %s 35e1e1f95c98b1add70c238093bbd5dc8d4f9c4e9Daniel Dunbar 45e1e1f95c98b1add70c238093bbd5dc8d4f9c4e9Daniel Dunbarint g0; 5c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenberg// CHECKBASIC: @g0 = common global i32 0 6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines__thread int TL_WITH_ALIAS; 7176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECKBASIC-DAG: @TL_WITH_ALIAS = thread_local global i32 0, align 4 826994a1c293e33bfa23d7c52e89a3e2eee31a976Alex Rosenbergstatic int bar1 = 42; 9c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenberg// CHECKBASIC: @bar1 = internal global i32 42 1026994a1c293e33bfa23d7c52e89a3e2eee31a976Alex Rosenberg 115e1e1f95c98b1add70c238093bbd5dc8d4f9c4e9Daniel Dunbarextern int g1; 125e1e1f95c98b1add70c238093bbd5dc8d4f9c4e9Daniel Dunbarextern int g1 __attribute((alias("g0"))); 1303954b3b6366223ed2ba85ed52ffe16c285142b7Rafael Espindola// CHECKBASIC-DAG: @g1 = alias i32* @g0 1426994a1c293e33bfa23d7c52e89a3e2eee31a976Alex Rosenberg 15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesextern __thread int __libc_errno __attribute__ ((alias ("TL_WITH_ALIAS"))); 16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECKBASIC-DAG: @__libc_errno = thread_local alias i32* @TL_WITH_ALIAS 17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1826994a1c293e33bfa23d7c52e89a3e2eee31a976Alex Rosenbergvoid f0(void) { } 1926994a1c293e33bfa23d7c52e89a3e2eee31a976Alex Rosenbergextern void f1(void); 2026994a1c293e33bfa23d7c52e89a3e2eee31a976Alex Rosenbergextern void f1(void) __attribute((alias("f0"))); 2103954b3b6366223ed2ba85ed52ffe16c285142b7Rafael Espindola// CHECKBASIC-DAG: @f1 = alias void ()* @f0 22176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECKBASIC-DAG: @test8_foo = weak alias bitcast (void ()* @test8_bar to void (...)*) 23c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECKBASIC-DAG: @test8_zed = alias bitcast (void ()* @test8_bar to void (...)*) 246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECKBASIC-DAG: @test9_zed = alias void ()* @test9_bar 25c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECKBASIC: define void @f0() [[NUW:#[0-9]+]] { 2682227ff4eb665bbf41720ebdc0dc9215a86ba838Chris Lattner 2782227ff4eb665bbf41720ebdc0dc9215a86ba838Chris Lattner// Make sure that aliases cause referenced values to be emitted. 2882227ff4eb665bbf41720ebdc0dc9215a86ba838Chris Lattner// PR3200 2982227ff4eb665bbf41720ebdc0dc9215a86ba838Chris Lattnerstatic inline int foo1() { return 0; } 3093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECKBASIC-LABEL: define internal i32 @foo1() 3182227ff4eb665bbf41720ebdc0dc9215a86ba838Chris Lattnerint foo() __attribute__((alias("foo1"))); 3282227ff4eb665bbf41720ebdc0dc9215a86ba838Chris Lattnerint bar() __attribute__((alias("bar1"))); 3382227ff4eb665bbf41720ebdc0dc9215a86ba838Chris Lattner 3435f6c136dd5201b87831dcdacc1eb4d2c2de0744Chris Lattnerextern int test6(); 3535f6c136dd5201b87831dcdacc1eb4d2c2de0744Chris Lattnervoid test7() { test6(); } // test6 is emitted as extern. 3635f6c136dd5201b87831dcdacc1eb4d2c2de0744Chris Lattner 3735f6c136dd5201b87831dcdacc1eb4d2c2de0744Chris Lattner// test6 changes to alias. 3835f6c136dd5201b87831dcdacc1eb4d2c2de0744Chris Lattnerint test6() __attribute__((alias("test7"))); 3935f6c136dd5201b87831dcdacc1eb4d2c2de0744Chris Lattner 40c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenbergstatic int inner(int a) { return 0; } 41c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenbergstatic int inner_weak(int a) { return 0; } 42c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenbergextern __typeof(inner) inner_a __attribute__((alias("inner"))); 43c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenbergstatic __typeof(inner_weak) inner_weak_a __attribute__((weakref, alias("inner_weak"))); 44c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenberg// CHECKCC: @inner_a = alias i32 (i32)* @inner 45c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECKCC: define internal arm_aapcs_vfpcc i32 @inner(i32 %a) [[NUW:#[0-9]+]] { 46c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenberg 47c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenbergint outer(int a) { return inner(a); } 48c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECKCC: define arm_aapcs_vfpcc i32 @outer(i32 %a) [[NUW]] { 49cbeda892668c7e7e8f0785bc72d96d28fe9ba8dfAlex Rosenberg// CHECKCC: call arm_aapcs_vfpcc i32 @inner(i32 %{{.*}}) 50c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenberg 51c857ce8b08397ed778928b8a000732ca90da2a8cAlex Rosenbergint outer_weak(int a) { return inner_weak_a(a); } 52c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECKCC: define arm_aapcs_vfpcc i32 @outer_weak(i32 %a) [[NUW]] { 53cbeda892668c7e7e8f0785bc72d96d28fe9ba8dfAlex Rosenberg// CHECKCC: call arm_aapcs_vfpcc i32 @inner_weak(i32 %{{.*}}) 54c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECKCC: define internal arm_aapcs_vfpcc i32 @inner_weak(i32 %a) [[NUW]] { 55f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling 56c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECKBASIC: attributes [[NUW]] = { nounwind{{.*}} } 57f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling 58c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECKCC: attributes [[NUW]] = { nounwind{{.*}} } 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid test8_bar() {} 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid test8_foo() __attribute__((weak, alias("test8_bar"))); 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid test8_zed() __attribute__((alias("test8_foo"))); 636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid test9_bar(void) { } 656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid test9_zed(void) __attribute__((section("test"))); 666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid test9_zed(void) __attribute__((alias("test9_bar"))); 67