mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
* 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>
247 lines
12 KiB
Swift
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
|