mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-09 04:15:58 +03:00

The critical section is lowered to a `static shared` global now; previously, it was `[static] __gshared`.
25 lines
730 B
D
25 lines
730 B
D
// RUN: %ldc -output-ll -of=%t.ll %s && FileCheck %s < %t.ll
|
|
|
|
import rt.monitor_ : Mutex;
|
|
|
|
struct D_CRITICAL_SECTION // private symbol in rt.critical_
|
|
{
|
|
D_CRITICAL_SECTION* next;
|
|
Mutex mtx;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
/* The synchronized-block uses a global buffer for the D_CRITICAL_SECTION.
|
|
* Match its size and alignment.
|
|
*/
|
|
// CHECK: __critsec{{.*}} = global {{\[}}[[SIZEOF:[0-9]+]] x i8{{\]}} zeroinitializer
|
|
// CHECK-SAME: align [[ALIGNOF:[0-9]+]]
|
|
synchronized {}
|
|
|
|
/* Verify size and alignment of the global against a manual D_CRITICAL_SECTION.
|
|
*/
|
|
// CHECK: %cs = alloca %gh1955.D_CRITICAL_SECTION, align [[ALIGNOF]]
|
|
// CHECK-SAME: size/byte = [[SIZEOF]]
|
|
D_CRITICAL_SECTION cs;
|
|
}
|