# // a.cpp
# #include <iostream>
# #include <vector>
# 
# template <int Magic> struct TemplatedObject {
#   static std::vector<TemplatedObject<Magic> *> Instances;
#   TemplatedObject() { Instances.push_back(this); }
# };
# 
# using Object = TemplatedObject<0>;
# template <> std::vector<Object *> Object::Instances{};
# Object idle{};
# 
# int main() {
#   if (Object::Instances.size() == 0)
#     std::cout << "It's broken" << std::endl;
#   else
#     std::cout << "It works!" << std::endl;
#   return 0;
# }
# // using `clang-cl /c a.cpp | lld-link a.obj` works
# // using `cl /c a.cpp | lld-link a.obj` fails without lld/COFF/Writer.cpp/Writer::sortSectionChunks()

# RUN: yaml2obj %s > %t.obj
# RUN: yaml2obj %S/Inputs/crt-dyn-initializer-order_1.yaml > %t1.obj
# RUN: yaml2obj %S/Inputs/crt-dyn-initializer-order_2.yaml > %t2.obj

# CHECK: Name: .CRT
# CHECK: Characteristics [
# CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
# CHECK-NEXT: IMAGE_SCN_MEM_READ
# CHECK-NEXT: ]
# CHECK-NEXT: SectionData (

# RUN: lld-link /out:%t.dll /entry:__ImageBase /dll %t.obj %t1.obj %t2.obj 
# RUN: llvm-readobj -sections -section-data %t.dll | FileCheck %s --check-prefixes CHECK,CASE1
# CASE1-NEXT: 01020304 55701011 1205

# RUN: lld-link /out:%t.dll /entry:__ImageBase /dll %t.obj %t2.obj %t1.obj 
# RUN: llvm-readobj -sections -section-data %t.dll | FileCheck %s --check-prefixes CHECK,CASE2
# CASE2-NEXT: 01020304 10111255 7005

# RUN: lld-link /out:%t.dll /entry:__ImageBase /dll %t1.obj %t2.obj %t.obj 
# RUN: llvm-readobj -sections -section-data %t.dll | FileCheck %s --check-prefixes CHECK,CASE3
# CASE3-NEXT: 01557010 11120203 0405

# RUN: lld-link /out:%t.dll /entry:__ImageBase /dll %t1.obj %t.obj %t2.obj 
# RUN: llvm-readobj -sections -section-data %t.dll | FileCheck %s --check-prefixes CHECK,CASE4
# CASE4-NEXT: 01557002 03041011 1205

# RUN: lld-link /out:%t.dll /entry:__ImageBase /dll %t2.obj %t1.obj %t.obj 
# RUN: llvm-readobj -sections -section-data %t.dll | FileCheck %s --check-prefixes CHECK,CASE5
# CASE5-NEXT: 01101112 55700203 0405

# RUN: lld-link /out:%t.dll /entry:__ImageBase /dll %t2.obj %t.obj %t1.obj
# RUN: llvm-readobj -sections -section-data %t.dll | FileCheck %s --check-prefixes CHECK,CASE6
# CASE6-NEXT: 01101112 02030455 7005

# CHECK-NEXT: )

--- !COFF
header:
  Machine:         IMAGE_FILE_MACHINE_AMD64
  Characteristics: [  ]
sections:
  - Name:            '.CRT$XCA'
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
    Alignment:       1
    SectionData:     01
  - Name:            '.CRT$XCU'
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
    Alignment:       1
    SectionData:     02
  - Name:            '.CRT$XCU'
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_LNK_COMDAT ]
    Alignment:       1
    SectionData:     03
  - Name:            '.CRT$XCU'
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
    Alignment:       1
    SectionData:     04
  - Name:            '.CRT$XCZ'
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
    Alignment:       1
    SectionData:     05
symbols:
  - Name:            '.CRT$XCU'
    Value:           0
    SectionNumber:   3
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
    SectionDefinition:
      Length:          1
      NumberOfRelocations: 0
      NumberOfLinenumbers: 0
      CheckSum:        1
      Number:          2
      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
...
