1*0d501f38SFangrui Song // RUN: %clang_cc1 %s -triple=powerpc-ibm-aix-xcoff -mtocdata=h,g,f,e,d,c,b,a,globalOneWithAlias,globalTwoWithAlias,ll,t3 -verify -emit-llvm -o - | FileCheck %s -check-prefix=CHECK --match-full-lines
2*0d501f38SFangrui Song // RUN: %clang_cc1 %s -triple=powerpc-ibm-aix-xcoff -mtocdata -verify=none -emit-llvm -o - | FileCheck %s -check-prefix=CHECK --match-full-lines
337b5eb0aSZaara Syeda
437b5eb0aSZaara Syeda // none-no-diagnostics
537b5eb0aSZaara Syeda
637b5eb0aSZaara Syeda struct large_struct {
737b5eb0aSZaara Syeda int x;
837b5eb0aSZaara Syeda short y;
937b5eb0aSZaara Syeda short z;
1037b5eb0aSZaara Syeda char c;
1137b5eb0aSZaara Syeda };
1237b5eb0aSZaara Syeda
1337b5eb0aSZaara Syeda struct large_struct a; // expected-warning {{-mtocdata option is ignored for a because variable is larger than a pointer}}
1437b5eb0aSZaara Syeda long long b = 5; // expected-warning {{-mtocdata option is ignored for b because variable is larger than a pointer}}
1537b5eb0aSZaara Syeda int __attribute__((aligned(128))) c = 0; // expected-warning {{-mtocdata option is ignored for c because variable is aligned wider than a pointer}}
1637b5eb0aSZaara Syeda double d = 2.5; // expected-warning {{-mtocdata option is ignored for d because variable is larger than a pointer}}
1737b5eb0aSZaara Syeda int e __attribute__((section("foo"))) = 10; // expected-warning {{-mtocdata option is ignored for e because variable has a section attribute}}
1837b5eb0aSZaara Syeda __thread int f; // expected-warning {{-mtocdata option is ignored for f because of thread local storage}}
1937b5eb0aSZaara Syeda
2037b5eb0aSZaara Syeda struct SomeStruct;
2137b5eb0aSZaara Syeda extern struct SomeStruct g; // expected-warning {{-mtocdata option is ignored for g because of incomplete type}}
2237b5eb0aSZaara Syeda
2337b5eb0aSZaara Syeda extern int h[]; // expected-warning {{-mtocdata option is ignored for h because of incomplete type}}
2437b5eb0aSZaara Syeda
2537b5eb0aSZaara Syeda struct ty3 {
2637b5eb0aSZaara Syeda int A;
2737b5eb0aSZaara Syeda char C[];
2837b5eb0aSZaara Syeda };
2937b5eb0aSZaara Syeda struct ty3 t3 = { 4, "fo" }; // expected-warning {{-mtocdata option is ignored for t3 because it contains a flexible array member}}
3037b5eb0aSZaara Syeda
3137b5eb0aSZaara Syeda int globalOneWithAlias = 10;
3237b5eb0aSZaara Syeda __attribute__((__alias__("globalOneWithAlias"))) extern int aliasOne; // expected-warning {{-mtocdata option is ignored for globalOneWithAlias because the variable has an alias}}
3337b5eb0aSZaara Syeda __attribute__((__alias__("globalTwoWithAlias"))) extern int aliasTwo; // expected-warning {{-mtocdata option is ignored for globalTwoWithAlias because the variable has an alias}}
3437b5eb0aSZaara Syeda int globalTwoWithAlias = 20;
3537b5eb0aSZaara Syeda
3637b5eb0aSZaara Syeda
func()3737b5eb0aSZaara Syeda int func() {
3837b5eb0aSZaara Syeda return a.x+b+c+d+e+f+h[0];
3937b5eb0aSZaara Syeda }
4037b5eb0aSZaara Syeda
getAddress(void)4137b5eb0aSZaara Syeda struct SomeStruct* getAddress(void) {
4237b5eb0aSZaara Syeda return &g;
4337b5eb0aSZaara Syeda }
4437b5eb0aSZaara Syeda
test()4537b5eb0aSZaara Syeda int test() {
4637b5eb0aSZaara Syeda return globalOneWithAlias + globalTwoWithAlias + aliasOne + aliasTwo;
4737b5eb0aSZaara Syeda }
4837b5eb0aSZaara Syeda
test2()4937b5eb0aSZaara Syeda long long test2() {
5037b5eb0aSZaara Syeda static long long ll = 5;
5137b5eb0aSZaara Syeda ll++;
5237b5eb0aSZaara Syeda return ll;
5337b5eb0aSZaara Syeda }
5437b5eb0aSZaara Syeda
5537b5eb0aSZaara Syeda // CHECK: @b = global i64 5, align 8
5637b5eb0aSZaara Syeda // CHECK: @c = global i32 0, align 128
5737b5eb0aSZaara Syeda // CHECK: @d = global double 2.500000e+00, align 8
5837b5eb0aSZaara Syeda // CHECK: @e = global i32 10, section "foo", align 4
5937b5eb0aSZaara Syeda // CHECK: @globalOneWithAlias = global i32 10, align 4
6037b5eb0aSZaara Syeda // CHECK: @globalTwoWithAlias = global i32 20, align 4
6137b5eb0aSZaara Syeda // CHECK: @a = global %struct.large_struct zeroinitializer, align 4
6237b5eb0aSZaara Syeda // CHECK: @f = thread_local global i32 0, align 4
6337b5eb0aSZaara Syeda // CHECK: @h = external global [0 x i32], align 4
6437b5eb0aSZaara Syeda // CHECK: @g = external global %struct.SomeStruct, align 1
6537b5eb0aSZaara Syeda // CHECK: @test2.ll = internal global i64 5, align 8
6637b5eb0aSZaara Syeda // CHECK: @aliasOne = alias i32, ptr @globalOneWithAlias
6737b5eb0aSZaara Syeda // CHECK: @aliasTwo = alias i32, ptr @globalTwoWithAlias
6837b5eb0aSZaara Syeda // CHECK-NOT: attributes #0 = { "toc-data" }
69