orphan.carbon 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. //
  5. // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon
  6. //
  7. // AUTOUPDATE
  8. // TIP: To test this file alone, run:
  9. // TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/impl/orphan.carbon
  10. // TIP: To dump output, run:
  11. // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/impl/orphan.carbon
  12. // --- imports.carbon
  13. library "[[@TEST_NAME]]";
  14. class ImportedC {}
  15. class ImportedD(T:! type) {}
  16. interface ImportedY {}
  17. interface ImportedZ(T:! type) {}
  18. constraint ImportedN(T:! type) {}
  19. class ImportedAnyParam[T:! type](X:! T) {}
  20. // --- fail_class_definition_missing.carbon
  21. library "[[@TEST_NAME]]";
  22. import library "imports";
  23. class C;
  24. // CHECK:STDERR: fail_class_definition_missing.carbon:[[@LINE+4]]:1: error: orphan `impl` found; something in the self-type or constraint must be defined in the same file [ImplIsOrphan]
  25. // CHECK:STDERR: impl C as ImportedY {}
  26. // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~
  27. // CHECK:STDERR:
  28. impl C as ImportedY {}
  29. // --- fail_class_definition_missing_for_self_specific.carbon
  30. library "[[@TEST_NAME]]";
  31. import library "imports";
  32. class C;
  33. // CHECK:STDERR: fail_class_definition_missing_for_self_specific.carbon:[[@LINE+4]]:1: error: orphan `impl` found; something in the self-type or constraint must be defined in the same file [ImplIsOrphan]
  34. // CHECK:STDERR: impl ImportedD(C) as ImportedY {}
  35. // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  36. // CHECK:STDERR:
  37. impl ImportedD(C) as ImportedY {}
  38. // --- fail_class_definition_missing_for_interface_specific.carbon
  39. library "[[@TEST_NAME]]";
  40. import library "imports";
  41. class C;
  42. // CHECK:STDERR: fail_class_definition_missing_for_interface_specific.carbon:[[@LINE+4]]:1: error: orphan `impl` found; something in the self-type or constraint must be defined in the same file [ImplIsOrphan]
  43. // CHECK:STDERR: impl ImportedC as ImportedZ(C) {}
  44. // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  45. // CHECK:STDERR:
  46. impl ImportedC as ImportedZ(C) {}
  47. // --- fail_imported_class.carbon
  48. library "[[@TEST_NAME]]";
  49. import library "imports";
  50. // CHECK:STDERR: fail_imported_class.carbon:[[@LINE+4]]:1: error: orphan `impl` found; something in the self-type or constraint must be defined in the same file [ImplIsOrphan]
  51. // CHECK:STDERR: impl ImportedC as ImportedY {}
  52. // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  53. // CHECK:STDERR:
  54. impl ImportedC as ImportedY {}
  55. // --- fail_imported_class_for_self_specific.carbon
  56. library "[[@TEST_NAME]]";
  57. import library "imports";
  58. // CHECK:STDERR: fail_imported_class_for_self_specific.carbon:[[@LINE+4]]:1: error: orphan `impl` found; something in the self-type or constraint must be defined in the same file [ImplIsOrphan]
  59. // CHECK:STDERR: impl ImportedD(ImportedC) as ImportedY {}
  60. // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  61. // CHECK:STDERR:
  62. impl ImportedD(ImportedC) as ImportedY {}
  63. // --- fail_imported_class_for_interface_specific.carbon
  64. library "[[@TEST_NAME]]";
  65. import library "imports";
  66. // CHECK:STDERR: fail_imported_class_for_interface_specific.carbon:[[@LINE+4]]:1: error: orphan `impl` found; something in the self-type or constraint must be defined in the same file [ImplIsOrphan]
  67. // CHECK:STDERR: impl ImportedC as ImportedZ(ImportedC) {}
  68. // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  69. // CHECK:STDERR:
  70. impl ImportedC as ImportedZ(ImportedC) {}
  71. // --- class_definition_after.carbon
  72. library "[[@TEST_NAME]]";
  73. import library "imports";
  74. class C;
  75. impl C as ImportedY {}
  76. class C {}
  77. // --- class_definition_after_for_self_specific.carbon
  78. library "[[@TEST_NAME]]";
  79. import library "imports";
  80. class C;
  81. impl ImportedD(C) as ImportedY {}
  82. class C {}
  83. // --- class_definition_after_for_interface_specific.carbon
  84. library "[[@TEST_NAME]]";
  85. import library "imports";
  86. class C;
  87. impl ImportedC as ImportedZ(C) {}
  88. class C {}
  89. // --- class_definition_before.carbon
  90. library "[[@TEST_NAME]]";
  91. import library "imports";
  92. class C {}
  93. impl C as ImportedY {}
  94. // --- class_definition_before_for_self_specific.carbon
  95. library "[[@TEST_NAME]]";
  96. import library "imports";
  97. class C {}
  98. impl ImportedD(C) as ImportedY {}
  99. // --- class_definition_before_for_interface_specific.carbon
  100. library "[[@TEST_NAME]]";
  101. import library "imports";
  102. class C {}
  103. impl ImportedC as ImportedZ(C) {}
  104. // --- fail_generic_class_from_import.carbon
  105. library "[[@TEST_NAME]]";
  106. import library "imports";
  107. // CHECK:STDERR: fail_generic_class_from_import.carbon:[[@LINE+4]]:1: error: orphan `impl` found; something in the self-type or constraint must be defined in the same file [ImplIsOrphan]
  108. // CHECK:STDERR: impl ImportedAnyParam(ImportedD) as ImportedY {}
  109. // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  110. // CHECK:STDERR:
  111. impl ImportedAnyParam(ImportedD) as ImportedY {}
  112. // --- generic_class.carbon
  113. library "[[@TEST_NAME]]";
  114. import library "imports";
  115. class D(T:! type) {}
  116. impl ImportedAnyParam(D) as ImportedY {}
  117. // --- fail_generic_interface_from_import.carbon
  118. library "[[@TEST_NAME]]";
  119. import library "imports";
  120. // CHECK:STDERR: fail_generic_interface_from_import.carbon:[[@LINE+4]]:1: error: orphan `impl` found; something in the self-type or constraint must be defined in the same file [ImplIsOrphan]
  121. // CHECK:STDERR: impl ImportedAnyParam(ImportedZ) as ImportedY {}
  122. // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  123. // CHECK:STDERR:
  124. impl ImportedAnyParam(ImportedZ) as ImportedY {}
  125. // --- generic_interface.carbon
  126. library "[[@TEST_NAME]]";
  127. import library "imports";
  128. interface Z(T:! type) {}
  129. impl ImportedAnyParam(Z) as ImportedY {}
  130. // --- fail_generic_named_constraint_from_import.carbon
  131. library "[[@TEST_NAME]]";
  132. import library "imports";
  133. // CHECK:STDERR: fail_generic_named_constraint_from_import.carbon:[[@LINE+4]]:1: error: orphan `impl` found; something in the self-type or constraint must be defined in the same file [ImplIsOrphan]
  134. // CHECK:STDERR: impl ImportedAnyParam(ImportedN) as ImportedY {}
  135. // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  136. // CHECK:STDERR:
  137. impl ImportedAnyParam(ImportedN) as ImportedY {}
  138. // --- generic_named_constraint.carbon
  139. library "[[@TEST_NAME]]";
  140. import library "imports";
  141. constraint N(T:! type) {}
  142. impl ImportedAnyParam(N) as ImportedY {}