// 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 // RUN: %clang_cc1 %s -triple=powerpc-ibm-aix-xcoff -mtocdata -verify=none -emit-llvm -o - | FileCheck %s -check-prefix=CHECK --match-full-lines // none-no-diagnostics struct large_struct { int x; short y; short z; char c; }; struct large_struct a; // expected-warning {{-mtocdata option is ignored for a because variable is larger than a pointer}} long long b = 5; // expected-warning {{-mtocdata option is ignored for b because variable is larger than a pointer}} int __attribute__((aligned(128))) c = 0; // expected-warning {{-mtocdata option is ignored for c because variable is aligned wider than a pointer}} double d = 2.5; // expected-warning {{-mtocdata option is ignored for d because variable is larger than a pointer}} int e __attribute__((section("foo"))) = 10; // expected-warning {{-mtocdata option is ignored for e because variable has a section attribute}} __thread int f; // expected-warning {{-mtocdata option is ignored for f because of thread local storage}} struct SomeStruct; extern struct SomeStruct g; // expected-warning {{-mtocdata option is ignored for g because of incomplete type}} extern int h[]; // expected-warning {{-mtocdata option is ignored for h because of incomplete type}} struct ty3 { int A; char C[]; }; struct ty3 t3 = { 4, "fo" }; // expected-warning {{-mtocdata option is ignored for t3 because it contains a flexible array member}} int globalOneWithAlias = 10; __attribute__((__alias__("globalOneWithAlias"))) extern int aliasOne; // expected-warning {{-mtocdata option is ignored for globalOneWithAlias because the variable has an alias}} __attribute__((__alias__("globalTwoWithAlias"))) extern int aliasTwo; // expected-warning {{-mtocdata option is ignored for globalTwoWithAlias because the variable has an alias}} int globalTwoWithAlias = 20; int func() { return a.x+b+c+d+e+f+h[0]; } struct SomeStruct* getAddress(void) { return &g; } int test() { return globalOneWithAlias + globalTwoWithAlias + aliasOne + aliasTwo; } long long test2() { static long long ll = 5; ll++; return ll; } // CHECK: @b = global i64 5, align 8 // CHECK: @c = global i32 0, align 128 // CHECK: @d = global double 2.500000e+00, align 8 // CHECK: @e = global i32 10, section "foo", align 4 // CHECK: @globalOneWithAlias = global i32 10, align 4 // CHECK: @globalTwoWithAlias = global i32 20, align 4 // CHECK: @a = global %struct.large_struct zeroinitializer, align 4 // CHECK: @f = thread_local global i32 0, align 4 // CHECK: @h = external global [0 x i32], align 4 // CHECK: @g = external global %struct.SomeStruct, align 1 // CHECK: @test2.ll = internal global i64 5, align 8 // CHECK: @aliasOne = alias i32, ptr @globalOneWithAlias // CHECK: @aliasTwo = alias i32, ptr @globalTwoWithAlias // CHECK-NOT: attributes #0 = { "toc-data" }