[clang] [C23] Use thread_local semantics (PR #70107)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 24 12:51:18 PDT 2023


================
@@ -0,0 +1,27 @@
+// RUN: %clang_cc1 -triple i686-pc-linux-gnu -std=c23 -emit-llvm -o - %s | FileCheck %s
+
+// Ensure that thread_local and _Thread_local emit the same codegen. See
+// https://github.com/llvm/llvm-project/issues/70068 for details.
+
+void func(void) {
+  static thread_local int i = 12;
+  static _Thread_local int j = 13;
+
+  extern thread_local int k;
+  extern thread_local int l;
+
+  (void)k;
+  (void)l;
+}
+
+// CHECK:      @func.i = internal thread_local global i32 12, align 4
+// CHECK-NEXT: @func.j = internal thread_local global i32 13, align 4
+// CHECK-NEXT: @k = external thread_local global i32, align 4
+// CHECK-NEXT: @l = external thread_local global i32, align 4
+
+// CHECK:      define dso_local void @func()
+// CHECK-NEXT: entry:
+// CHECK-NEXT: %[[K:.+]] = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @k)
+// CHECK-NEXT: %{{.+}} = load i32, ptr %[[K]], align 4
----------------
erichkeane wrote:

Probably not worth having anything up to or including the equals sign here, it doesn't really add anything.  Same on line 27.

https://github.com/llvm/llvm-project/pull/70107


More information about the cfe-commits mailing list