Files
swift-mirror/test/Index/Store/unit-custom-output-path-driver.swift
Josh Soref 3c8ec81efb Spelling index (#42543)
* spelling: different

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: implicit

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: overridden

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: parameter

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: treat

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: unknown

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
2022-04-25 12:59:12 -07:00

219 lines
14 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: touch %/t/main.swift
// RUN: touch %/t/second.swift
// 1. Incremental mode (single primary file)
//
// A) Run without an "index-unit-output-path" entry:
// RUN: echo '{ ' > %/t/outputmap.json
// RUN: echo ' "%/t/main.swift":{ ' >> %/t/outputmap.json
// RUN: echo ' "object": "%/t/main_out.o" ' >> %/t/outputmap.json
// RUN: echo ' }, ' >> %/t/outputmap.json
// RUN: echo ' "%/t/second.swift":{ ' >> %/t/outputmap.json
// RUN: echo ' "object": "%/t/second_out.o"' >> %/t/outputmap.json
// RUN: echo ' } ' >> %/t/outputmap.json
// RUN: echo '} ' >> %/t/outputmap.json
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -disable-batch-mode -output-file-map %/t/outputmap.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_without \
// RUN: %/t/main.swift %/t/second.swift
//
// Check the unit output is based on the "object" field
// RUN: c-index-test core -print-unit %/t/idx_without | %FileCheck -check-prefixes=INDEX_WITHOUT %s
//
// INDEX_WITHOUT: main_out.o-{{.*}}
// INDEX_WITHOUT-NEXT: --------
// INDEX_WITHOUT: out-file: {{.*}}main_out.o
//
// INDEX_WITHOUT: second_out.o-{{.*}}
// INDEX_WITHOUT-NEXT: --------
// INDEX_WITHOUT: out-file: {{.*}}second_out.o
//
// B) Run with an "index-unit-output-path" entry different from the "output" entry:
// RUN: echo '{ ' > %/t/outputmap-custom.json
// RUN: echo ' "%/t/main.swift":{ ' >> %/t/outputmap-custom.json
// RUN: echo ' "object": "%/t/main_out.o", ' >> %/t/outputmap-custom.json
// RUN: echo ' "index-unit-output-path": "%/t/main_custom.o" ' >> %/t/outputmap-custom.json
// RUN: echo ' }, ' >> %/t/outputmap-custom.json
// RUN: echo ' "%/t/second.swift":{ ' >> %/t/outputmap-custom.json
// RUN: echo ' "object": "%/t/second_out.o", ' >> %/t/outputmap-custom.json
// RUN: echo ' "index-unit-output-path": "%/t/second_custom.o" ' >> %/t/outputmap-custom.json
// RUN: echo ' } ' >> %/t/outputmap-custom.json
// RUN: echo '} ' >> %/t/outputmap-custom.json
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -disable-batch-mode -output-file-map %/t/outputmap-custom.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_with \
// RUN: %/t/main.swift %/t/second.swift
//
// Run the same command as above again but with different "output" entry
// RUN: echo '{ ' > %/t/outputmap-different.json
// RUN: echo ' "%/t/main.swift":{ ' >> %/t/outputmap-different.json
// RUN: echo ' "object": "%/t/main_different.o", ' >> %/t/outputmap-different.json
// RUN: echo ' "index-unit-output-path": "%/t/main_custom.o" ' >> %/t/outputmap-different.json
// RUN: echo ' }, ' >> %/t/outputmap-different.json
// RUN: echo ' "%/t/second.swift":{ ' >> %/t/outputmap-different.json
// RUN: echo ' "object": "%/t/second_different.o", ' >> %/t/outputmap-different.json
// RUN: echo ' "index-unit-output-path": "%/t/second_custom.o" ' >> %/t/outputmap-different.json
// RUN: echo ' } ' >> %/t/outputmap-different.json
// RUN: echo '} ' >> %/t/outputmap-different.json
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -disable-batch-mode -output-file-map %/t/outputmap-different.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_with \
// RUN: %/t/main.swift %/t/second.swift
//
// Check the unit output is based on -index-unit-output-path:
// RUN: c-index-test core -print-unit %/t/idx_with | %FileCheck -check-prefixes=INDEX_WITH %s
//
// Check no units were produced based on the -o values
// RUN: c-index-test core -print-unit %/t/idx_with | %FileCheck -check-prefixes=INDEX_WITH_NEGATIVE %s
//
// INDEX_WITH: main_custom.o-{{.*}}
// INDEX_WITH-NEXT: --------
// INDEX_WITH: out-file: {{.*}}main_custom.o
//
// INDEX_WITH: second_custom.o-{{.*}}
// INDEX_WITH-NEXT: --------
// INDEX_WITH: out-file: {{.*}}second_custom.o
//
// INDEX_WITH_NEGATIVE-NOT: main_out.o
// INDEX_WITH_NEGATIVE-NOT: main_different.o
// INDEX_WITH_NEGATIVE-NOT: second_out.o
// INDEX_WITH_NEGATIVE-NOT: second_different.o
//
// Run with a different -index-unit-output-path
// RUN: echo '{ ' > %/t/outputmap-different2.json
// RUN: echo ' "%/t/main.swift":{ ' >> %/t/outputmap-different2.json
// RUN: echo ' "object": "%/t/main_different.o", ' >> %/t/outputmap-different2.json
// RUN: echo ' "index-unit-output-path": "%/t/xmain_custom.o" ' >> %/t/outputmap-different2.json
// RUN: echo ' }, ' >> %/t/outputmap-different2.json
// RUN: echo ' "%/t/second.swift":{ ' >> %/t/outputmap-different2.json
// RUN: echo ' "object": "%/t/second_different.o", ' >> %/t/outputmap-different2.json
// RUN: echo ' "index-unit-output-path": "%/t/xsecond_custom.o"' >> %/t/outputmap-different2.json
// RUN: echo ' } ' >> %/t/outputmap-different2.json
// RUN: echo '} ' >> %/t/outputmap-different2.json
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -disable-batch-mode -output-file-map %/t/outputmap-different2.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_with \
// RUN: %/t/main.swift %/t/second.swift
//
// Check it resulted in a second unit being added to the store
// RUN: c-index-test core -print-unit %/t/idx_with | %FileCheck -check-prefixes=INDEX_WITH,INDEX_WITH_SECOND %s
//
// INDEX_WITH_SECOND: xmain_custom.o-{{.*}}
// INDEX_WITH_SECOND: --------
// INDEX_WITH_SECOND: out-file: {{.*}}xmain_custom.o
//
// INDEX_WITH_SECOND: xsecond_custom.o-{{.*}}
// INDEX_WITH_SECOND: --------
// INDEX_WITH_SECOND: out-file: {{.*}}xsecond_custom.o
//
// C) Do the above again but with a fresh index store and using file lists.
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -disable-batch-mode -driver-filelist-threshold=0 \
// RUN: -output-file-map %/t/outputmap-custom.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_with_list \
// RUN: %/t/main.swift %/t/second.swift
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -driver-filelist-threshold=0 -output-file-map %/t/outputmap-different.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_with_list \
// RUN: %/t/main.swift %/t/second.swift
//
// RUN: c-index-test core -print-unit %/t/idx_with_list | %FileCheck -check-prefixes=INDEX_WITH %s
// RUN: c-index-test core -print-unit %/t/idx_with_list | %FileCheck -check-prefixes=INDEX_WITH_NEGATIVE %s
// 2. Batch mode (multiple primary files)
//
// A) Run without an "index-unit-output-path" entry:
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -enable-batch-mode -driver-batch-count 1 -output-file-map %/t/outputmap.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_batch_without \
// RUN: %/t/main.swift %/t/second.swift
//
// Check the unit output is based on the "output" values
// RUN: c-index-test core -print-unit %/t/idx_batch_without | %FileCheck -check-prefixes=INDEX_WITHOUT %s
//
// B) Run with "index-unit-output-path" values different from the "output" values:
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -enable-batch-mode -driver-batch-count 1 -output-file-map %/t/outputmap-custom.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_batch_with \
// RUN: %/t/main.swift %/t/second.swift
//
// Run the same command as above again but with different "output" value
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -enable-batch-mode -driver-batch-count 1 -output-file-map %/t/outputmap-different.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_batch_with \
// RUN: %/t/main.swift %/t/second.swift
//
// Check the unit output is based on "index-unit-output-path":
// RUN: c-index-test core -print-unit %/t/idx_batch_with | %FileCheck -check-prefixes=INDEX_WITH %s
//
// Check the unit output is not baed on the "output" values:
// RUN: c-index-test core -print-unit %/t/idx_batch_with | %FileCheck -check-prefixes=INDEX_WITH_NEGATIVE %s
//
// C) Do the above again but with a fresh index store and using file lists.
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -driver-filelist-threshold=0 -enable-batch-mode -driver-batch-count 1 \
// RUN: -output-file-map %/t/outputmap-custom.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_batch_with_list \
// RUN: %/t/main.swift %/t/second.swift
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -driver-filelist-threshold=0 -enable-batch-mode -driver-batch-count 1 \
// RUN: -output-file-map %/t/outputmap-different.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_batch_with_list \
// RUN: %/t/main.swift %/t/second.swift
//
// RUN: c-index-test core -print-unit %/t/idx_batch_with_list | %FileCheck -check-prefixes=INDEX_WITH %s
// RUN: c-index-test core -print-unit %/t/idx_batch_with_list | %FileCheck -check-prefixes=INDEX_WITH_NEGATIVE %s
// 3. Multi-threaded WMO
//
// A) Run without an "index-unit-output-path" entry:
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -whole-module-optimization -num-threads 2 -output-file-map %/t/outputmap.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_wmo_without \
// RUN: %/t/main.swift %/t/second.swift
//
// Check the unit output is based on the "output" entry
// RUN: c-index-test core -print-unit %/t/idx_wmo_without | %FileCheck -check-prefixes=INDEX_WITHOUT %s
//
// B) Run with an "index-unit-output-path" entry different from the "output" value
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -whole-module-optimization -num-threads 2 -output-file-map %/t/outputmap-custom.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_wmo_with \
// RUN: %/t/main.swift %/t/second.swift
//
// Run the same command as above again but with different "output" values
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -whole-module-optimization -num-threads 2 -output-file-map %/t/outputmap-different.json \
// RUN: -module-name mod_name -index-store-path %/t/idx_wmo_with \
// RUN: %/t/main.swift %/t/second.swift
//
// Check the unit output is based on "index-unit-output-path" entry
// RUN: c-index-test core -print-unit %/t/idx_wmo_with | %FileCheck -check-prefixes=INDEX_WITH %s
// Check no units were produced based on the "output" values:
// RUN: c-index-test core -print-unit %/t/idx_wmo_with | %FileCheck -check-prefixes=INDEX_WITH_NEGATIVE %s
// 4. Index file
//
// A) Run without -index-unit-output-path
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -module-name mod_name -index-store-path %/t/idx_index_without \
// RUN: %/t/main.swift %/t/second.swift -index-file -index-file-path %/t/main.swift \
// RUN: -o %/t/main_out.o
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -module-name mod_name -index-store-path %/t/idx_index_without \
// RUN: %/t/main.swift %/t/second.swift -index-file -index-file-path %/t/second.swift \
// RUN: -o %/t/second_out.o
//
// Check that the unit output is based on -o
// RUN: c-index-test core -print-unit %/t/idx_index_without | %FileCheck -check-prefixes=INDEX_WITHOUT %s
//
// B) Run with -index-unit-output-path
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -module-name mod_name -index-store-path %/t/idx_index_with \
// RUN: %/t/main.swift %/t/second.swift -index-file -index-file-path %/t/main.swift \
// RUN: -o %/t/main_out.o -index-unit-output-path %/t/main_custom.o
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -module-name mod_name -index-store-path %/t/idx_index_with \
// RUN: %/t/main.swift %/t/second.swift -index-file -index-file-path %/t/second.swift \
// RUN: -o %/t/second_out.o -index-unit-output-path %/t/second_custom.o
//
// Run the same commands as above again but with different -o value
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -module-name mod_name -index-store-path %/t/idx_index_with \
// RUN: %/t/main.swift %/t/second.swift -index-file -index-file-path %/t/main.swift \
// RUN: -o %/t/main_different.o -index-unit-output-path %/t/main_custom.o
// RUN: %target-swiftc_driver -Xfrontend -index-ignore-stdlib -module-name mod_name -index-store-path %/t/idx_index_with \
// RUN: %/t/main.swift %/t/second.swift -index-file -index-file-path %/t/second.swift \
// RUN: -o %/t/second_different.o -index-unit-output-path %/t/second_custom.o
//
// Check that the unit output is based on -index-unit-output-path
// RUN: c-index-test core -print-unit %/t/idx_index_with | %FileCheck -check-prefixes=INDEX_WITH %s
//
// Check that the unit output is not based on -o
// RUN: c-index-test core -print-unit %/t/idx_index_with | %FileCheck -check-prefixes=INDEX_WITH_NEGATIVE %s