Files
swift-mirror/test/Index/Store/unit-custom-output-path.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

247 lines
12 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 -index-unit-output-path:
// RUN: %target-swift-frontend -typecheck -parse-stdlib \
// RUN: -module-name mod_name -index-store-path %t/idx_without \
// RUN: -primary-file %t/main.swift %t/second.swift \
// RUN: -o %t/main_out.o
//
// Check the unit output is based on -o
// 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
//
// B) Run with a -index-unit-output-path different from the -o value:
// RUN: %target-swift-frontend -typecheck -parse-stdlib \
// RUN: -module-name mod_name -index-store-path %t/idx_with \
// RUN: -primary-file %t/main.swift %t/second.swift \
// RUN: -o %t/main_out.o -index-unit-output-path %t/custom_output.o
//
// Run the same command as above again but with different -o value
// RUN: %target-swift-frontend -typecheck -parse-stdlib \
// RUN: -module-name mod_name -index-store-path %t/idx_with \
// RUN: -primary-file %t/main.swift %t/second.swift \
// RUN: -o %t/different.o -index-unit-output-path %t/custom_output.o
//
// 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: custom_output.o-{{.*}}
// INDEX_WITH-NEXT: --------
// INDEX_WITH: out-file: {{.*}}custom_output.o
//
// INDEX_WITH_NEGATIVE-NOT: main_out.o
// INDEX_WITH_NEGATIVE-NOT: different.o
//
// Run with a different -index-unit-output-path
// RUN: %target-swift-frontend -typecheck -parse-stdlib \
// RUN: -module-name mod_name -index-store-path %t/idx_with \
// RUN: -primary-file %t/main.swift %t/second.swift \
// RUN: -o %t/different.o -index-unit-output-path %t/custom_output_two.o
//
// 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: custom_output_two.o-{{.*}}
// INDEX_WITH_SECOND: --------
// INDEX_WITH_SECOND: out-file: {{.*}}custom_output_two.o
//
// C) Do the above again but with a fresh index store and using file lists.
//
// RUN: echo '%t/main.swift' > %t/filelist
// RUN: echo '%t/second.swift' >> %t/filelist
//
// RUN: echo '%t/output.o' > %t/outputlist
//
// RUN: echo '"%t/custom_output.o' > %t/index-outputlist
//
// RUN: %target-swift-frontend -typecheck -parse-stdlib \
// RUN: -module-name mod_name -index-store-path %t/idx_with_list \
// RUN: -primary-file %t/main.swift -filelist %t/filelist \
// RUN: -output-filelist %t/outputlist -index-unit-output-path-filelist %t/index-outputlist
// RUN: echo '%t/different.o' > %t/outputlist
// RUN: %target-swift-frontend -typecheck -parse-stdlib \
// RUN: -module-name mod_name -index-store-path %t/idx_with_list \
// RUN: -primary-file %t/main.swift -filelist %t/filelist \
// RUN: -output-filelist %t/outputlist -index-unit-output-path-filelist %t/index-outputlist
//
// 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 -index-unit-output-path:
// RUN: %target-swift-frontend -typecheck -parse-stdlib -enable-batch-mode \
// RUN: -module-name mod_name -index-store-path %t/idx_batch_without \
// RUN: -primary-file %t/main.swift -primary-file %t/second.swift \
// RUN: -o %t/main_out.o -o second_out.o
//
// Check the unit output is based on the -o values
// RUN: c-index-test core -print-unit %t/idx_batch_without | %FileCheck -check-prefixes=INDEX_BATCH_WITHOUT %s
//
// INDEX_BATCH_WITHOUT: main_out.o-{{.*}}
// INDEX_BATCH_WITHOUT-NEXT: --------
// INDEX_BATCH_WITHOUT: out-file: {{.*}}main_out.o
//
// INDEX_BATCH_WITHOUT: second_out.o-{{.*}}
// INDEX_BATCH_WITHOUT-NEXT: --------
// INDEX_BATCH_WITHOUT: out-file: {{.*}}second_out.o
//
// B) Run with -index-unit-output-path values different from the -o values:
// RUN: %target-swift-frontend -typecheck -parse-stdlib -enable-batch-mode \
// RUN: -module-name mod_name -index-store-path %t/idx_batch_with \
// RUN: -primary-file %t/main.swift -primary-file %t/second.swift \
// RUN: -o %t/main_out.o -o %t/second_out.o \
// RUN: -index-unit-output-path %t/custom_main.o -index-unit-output-path %t/custom_second.o
//
// Run the same command as above again but with different -o value
// RUN: %target-swift-frontend -typecheck -parse-stdlib -enable-batch-mode \
// RUN: -module-name mod_name -index-store-path %t/idx_batch_with \
// RUN: -primary-file %t/main.swift -primary-file %t/second.swift \
// RUN: -o %t/different_main.o -o %t/different_second.o \
// RUN: -index-unit-output-path %t/custom_main.o -index-unit-output-path %t/custom_second.o
//
// 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_BATCH_WITH %s
//
// Check the unit output is not baed on the -o values:
// RUN: c-index-test core -print-unit %t/idx_batch_with | %FileCheck -check-prefixes=INDEX_BATCH_WITH_NEGATIVE %s
//
// INDEX_BATCH_WITH: custom_main.o-{{.*}}
// INDEX_BATCH_WITH-NEXT: --------
// INDEX_BATCH_WITH: out-file: {{.*}}custom_main.o
//
// INDEX_BATCH_WITH: custom_second.o-{{.*}}
// INDEX_BATCH_WITH-NEXT: --------
// INDEX_BATCH_WITH: out-file: {{.*}}custom_second.o
//
// INDEX_BATCH_WITH_NEGATIVE-NOT: different_main.o
// INDEX_BATCH_WITH_NEGATIVE-NOT: different_second.o
// INDEX_BATCH_WITH_NEGATIVE-NOT: main_out.o
// INDEX_BATCH_WITH_NEGATIVE-NOT: second_out.o
//
// C) Do the above again but with a fresh index store and using file lists.
//
// RUN: echo '%t/main.swift' > %t/filelist
// RUN: echo '%t/second.swift' >> %t/filelist
//
// RUN: echo '%t/main_out.o' > %t/outputlist
// RUN: echo '%t/second_out.o' >> %t/outputlist
//
// RUN: echo '"%t/custom_main.o' > %t/index-outputlist
// RUN: echo '"%t/custom_second.o' >> %t/index-outputlist
//
// RUN: %target-swift-frontend -typecheck -parse-stdlib -enable-batch-mode \
// RUN: -module-name mod_name -index-store-path %t/idx_batch_with_list \
// RUN: -primary-filelist %t/filelist -filelist %t/filelist \
// RUN: -output-filelist %t/outputlist -index-unit-output-path-filelist %t/index-outputlist
//
// RUN: echo '%t/different_main.o' > %t/outputlist
// RUN: echo '%t/different_second.o' >> %t/outputlist
//
// RUN: %target-swift-frontend -typecheck -parse-stdlib -enable-batch-mode \
// RUN: -module-name mod_name -index-store-path %t/idx_batch_with_list \
// RUN: -primary-filelist %t/filelist -filelist %t/filelist \
// RUN: -output-filelist %t/outputlist -index-unit-output-path-filelist %t/index-outputlist
//
// RUN: c-index-test core -print-unit %t/idx_batch_with_list | %FileCheck -check-prefixes=INDEX_BATCH_WITH %s
// RUN: c-index-test core -print-unit %t/idx_batch_with_list | %FileCheck -check-prefixes=INDEX_BATCH_WITH_NEGATIVE %s
// 3. Multi-threaded WMO
//
// A) Run without -index-unit-output-path:
// RUN: %target-swift-frontend -typecheck -parse-stdlib -num-threads 2 \
// RUN: -module-name mod_name -index-store-path %t/idx_wmo_without \
// RUN: %t/main.swift %t/second.swift \
// RUN: -o %t/main_out.o -o %t/second_out.o
//
// Check the unit output is based on -o
// RUN: c-index-test core -print-unit %t/idx_wmo_without | %FileCheck -check-prefixes=INDEX_WMO_WITHOUT %s
//
// INDEX_WMO_WITHOUT: main_out.o-{{.*}}
// INDEX_WMO_WITHOUT-NEXT: --------
// INDEX_WMO_WITHOUT: out-file: {{.*}}main_out.o
//
// INDEX_WMO_WITHOUT: second_out.o-{{.*}}
// INDEX_WMO_WITHOUT-NEXT: --------
// INDEX_WMO_WITHOUT: out-file: {{.*}}second_out.o
//
// B) Run with a -index-unit-output-path different from the -o value
// RUN: %target-swift-frontend -typecheck -parse-stdlib -num-threads 2 \
// RUN: -module-name mod_name -index-store-path %t/idx_wmo_with \
// RUN: %t/main.swift %t/second.swift \
// RUN: -o %t/main_out.o -o %t/second_out.o \
// RUN: -index-unit-output-path %t/main_custom.o -index-unit-output-path %t/second_custom.o
//
// Run the same command as above again but with different -o values
// RUN: %target-swift-frontend -typecheck -parse-stdlib -num-threads 2 \
// RUN: -module-name mod_name -index-store-path %t/idx_wmo_with \
// RUN: %t/main.swift %t/second.swift \
// RUN: -o %t/main_different.o -o %t/second_different.o \
// RUN: -index-unit-output-path %t/main_custom.o -index-unit-output-path %t/second_custom.o
//
// Check the unit output is based on -index-unit-output-path
// RUN: c-index-test core -print-unit %t/idx_wmo_with | %FileCheck -check-prefixes=INDEX_WMO_WITH %s
// Check no units were produced based on the -o values:
// RUN: c-index-test core -print-unit %t/idx_wmo_with | %FileCheck -check-prefixes=INDEX_WMO_WITH_NEGATIVE %s
//
// INDEX_WMO_WITH: main_custom.o-{{.*}}
// INDEX_WMO_WITH-NEXT: --------
// INDEX_WMO_WITH: out-file: {{.*}}main_custom.o
//
// INDEX_WMO_WITH: second_custom.o-{{.*}}
// INDEX_WMO_WITH-NEXT: --------
// INDEX_WMO_WITH: out-file: {{.*}}second_custom.o
//
// INDEX_WMO_WITH_NEGATIVE-NOT: main_out.o
// INDEX_WMO_WITH_NEGATIVE-NOT: second_out.o
// INDEX_WMO_WITH_NEGATIVE-NOT: main_different.o
// INDEX_WMO_WITH_NEGATIVE-NOT: second_different.o
// 4. Diagnostics
//
// A) Check mismatched -o and -index-unit-output-path errors
// RUN: not %target-swift-frontend -typecheck -parse-stdlib \
// RUN: -module-name mod_name -index-store-path %t/idx_ignored \
// RUN: -primary-file %t/main.swift %t/second.swift \
// RUN: -o %t/main_out.o -index-unit-output-path %t/custom_output.o -index-unit-output-path %t/custom_output.o 2>&1 \
// RUN: | %FileCheck --check-prefixes=ERROR_MISMATCH %s
//
// ERROR_MISMATCH: error: if any index unit output path files are specified, they all must be
//
// B) Check mismatched -o and -index-unit-output-path via file lists errors
// RUN: echo '%t/main.swift' > %t/filelist
// RUN: echo '%t/second.swift' >> %t/filelist
//
// RUN: echo '%t/main_out.o' > %t/outputlist
// RUN: echo '%t/second_out.o' >> %t/outputlist
//
// RUN: echo '"%t/custom_main.o' > %t/index-outputlist
//
// RUN: not %target-swift-frontend -typecheck -parse-stdlib -enable-batch-mode \
// RUN: -module-name mod_name -index-store-path %t/idx_ignored \
// RUN: -primary-filelist %t/filelist -filelist %t/filelist \
// RUN: -output-filelist %t/outputlist -index-unit-output-path-filelist %t/index-outputlist 2>&1 \
// RUN: | %FileCheck --check-prefixes=ERROR_MISMATCH %s
//
// C) Check -index-unit-output-path without -index-store-path does not cause a warning/error
// RUN: %target-typecheck-verify-swift -parse-stdlib \
// RUN: -module-name mod_name \
// RUN: -primary-file %t/main.swift %t/second.swift \
// RUN: -o %t/main_out.o -index-unit-output-path %t/custom_output.o