xref: /llvm-project/clang/test/CodeGenCXX/attr-loader-uninitialized.cpp (revision fd739804e0591468762eb87488a497a3f7d4afb0)
1 // RUN: %clang_cc1 -triple=x86_64-linux-gnu -emit-llvm -o - %s | FileCheck %s
2 
3 // CHECK: @defn ={{.*}} global i32 undef
4 int defn  [[clang::loader_uninitialized]];
5 
6 // CHECK: @_ZL11defn_static = internal global i32 undef
7 static int defn_static [[clang::loader_uninitialized]] __attribute__((used));
8 
9 // CHECK: @_ZZ4funcvE4data = internal global i32 undef
func(void)10 int* func(void)
11 {
12   static int data [[clang::loader_uninitialized]];
13   return &data;
14 }
15 
16 class trivial
17 {
18   float x;
19 };
20 
21 // CHECK: @ut ={{.*}} global %class.trivial undef
22 trivial ut [[clang::loader_uninitialized]];
23 
24 // CHECK: @arr ={{.*}} global [32 x double] undef
25 double arr[32] __attribute__((loader_uninitialized));
26 
27 // Defining as arr2[] [[clang..]] raises the error: attribute cannot be applied to types
28 // CHECK: @arr2 ={{.*}} global [4 x double] undef
29 double arr2 [[clang::loader_uninitialized]] [4];
30 
31 template<typename T> struct templ{T * t;};
32 
33 // CHECK: @templ_int ={{.*}} global %struct.templ undef
34 templ<int> templ_int [[clang::loader_uninitialized]];
35 
36 // CHECK: @templ_trivial ={{.*}} global %struct.templ.0 undef
37 templ<trivial> templ_trivial [[clang::loader_uninitialized]];
38 
39 // CHECK: @templ_incomplete ={{.*}} global %struct.templ.1 undef
40 struct incomplete;
41 templ<incomplete> templ_incomplete [[clang::loader_uninitialized]];
42