-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Move struct param tests to a dedicated file #5539
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: trunk
Are you sure you want to change the base?
Changes from all commits
c4b2357
9c95e51
4f6fc1b
ea25b65
30b79d1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -151,56 +151,56 @@ fn F() { | |
// TODO: Test that template functions are unsupported. | ||
// This is not tested because template functions are not considered a single result when doing lookup. | ||
|
||
// TODO: Add a test per unsupported param type. See https://github.com/carbon-language/carbon-lang/pull/5477/files/4321e21ed27d987fd71be182d292973fd9849df8#r2094655176 | ||
|
||
// ============================================================================ | ||
// Struct param type | ||
// Struct declaration return type | ||
// ============================================================================ | ||
|
||
// --- struct_param_type.h | ||
// --- struct_decl_return_type.h | ||
|
||
struct S {}; | ||
struct F; | ||
|
||
auto foo(S) -> void; | ||
F foo(); | ||
|
||
// --- fail_todo_import_struct_param_type.carbon | ||
// --- fail_todo_import_struct_decl_return_type.carbon | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Similar to above, calling foo() will not ever pass if Do you want to change it to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
||
library "[[@TEST_NAME]]"; | ||
|
||
import Cpp library "struct_param_type.h"; | ||
import Cpp library "struct_decl_return_type.h"; | ||
|
||
fn F() { | ||
// CHECK:STDERR: fail_todo_import_struct_param_type.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: struct S` [SemanticsTodo] | ||
// CHECK:STDERR: Cpp.foo({}); | ||
// CHECK:STDERR: fail_todo_import_struct_decl_return_type.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: return type: struct F` [SemanticsTodo] | ||
// CHECK:STDERR: Cpp.foo(); | ||
// CHECK:STDERR: ^~~~~~~ | ||
// CHECK:STDERR: fail_todo_import_struct_param_type.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] | ||
// CHECK:STDERR: Cpp.foo({}); | ||
// CHECK:STDERR: fail_todo_import_struct_decl_return_type.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] | ||
// CHECK:STDERR: Cpp.foo(); | ||
// CHECK:STDERR: ^~~~~~~ | ||
// CHECK:STDERR: | ||
Cpp.foo({}); | ||
Cpp.foo(); | ||
} | ||
|
||
// TODO: Add a test per unsupported param type. See https://github.com/carbon-language/carbon-lang/pull/5477/files/4321e21ed27d987fd71be182d292973fd9849df8#r2094655176 | ||
|
||
// ============================================================================ | ||
// Struct return type | ||
// Struct definition return type | ||
// ============================================================================ | ||
|
||
// --- struct_return_type.h | ||
// --- struct_definition_return_type.h | ||
|
||
struct F; | ||
struct F {}; | ||
|
||
F foo(); | ||
|
||
// --- fail_todo_import_struct_return_type.carbon | ||
// --- fail_todo_import_struct_definition_return_type.carbon | ||
|
||
library "[[@TEST_NAME]]"; | ||
|
||
import Cpp library "struct_return_type.h"; | ||
import Cpp library "struct_definition_return_type.h"; | ||
|
||
fn F() { | ||
// CHECK:STDERR: fail_todo_import_struct_return_type.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: return type: struct F` [SemanticsTodo] | ||
// CHECK:STDERR: fail_todo_import_struct_definition_return_type.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: return type: struct F` [SemanticsTodo] | ||
// CHECK:STDERR: Cpp.foo(); | ||
// CHECK:STDERR: ^~~~~~~ | ||
// CHECK:STDERR: fail_todo_import_struct_return_type.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] | ||
// CHECK:STDERR: fail_todo_import_struct_definition_return_type.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] | ||
// CHECK:STDERR: Cpp.foo(); | ||
// CHECK:STDERR: ^~~~~~~ | ||
// CHECK:STDERR: | ||
|
@@ -446,12 +446,11 @@ fn F() { | |
// CHECK:STDOUT: return | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: --- fail_todo_import_struct_param_type.carbon | ||
// CHECK:STDOUT: --- fail_todo_import_struct_decl_return_type.carbon | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: constants { | ||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] | ||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] | ||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: imports { | ||
|
@@ -467,7 +466,7 @@ fn F() { | |
// CHECK:STDOUT: .F = %F.decl | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { | ||
// CHECK:STDOUT: import Cpp "struct_param_type.h" | ||
// CHECK:STDOUT: import Cpp "struct_decl_return_type.h" | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} | ||
// CHECK:STDOUT: } | ||
|
@@ -476,11 +475,10 @@ fn F() { | |
// CHECK:STDOUT: !entry: | ||
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] | ||
// CHECK:STDOUT: %foo.ref: <error> = name_ref foo, <error> [concrete = <error>] | ||
// CHECK:STDOUT: %.loc14: %empty_struct_type = struct_literal () | ||
// CHECK:STDOUT: return | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: --- fail_todo_import_struct_return_type.carbon | ||
// CHECK:STDOUT: --- fail_todo_import_struct_definition_return_type.carbon | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: constants { | ||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] | ||
|
@@ -500,7 +498,7 @@ fn F() { | |
// CHECK:STDOUT: .F = %F.decl | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { | ||
// CHECK:STDOUT: import Cpp "struct_return_type.h" | ||
// CHECK:STDOUT: import Cpp "struct_definition_return_type.h" | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} | ||
// CHECK:STDOUT: } | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM | ||
// Exceptions. See /LICENSE for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
// AUTOUPDATE | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since this is adding/updating tests, can you please add ranges at the same time? For more information, please see: |
||
// TIP: To test this file alone, run: | ||
// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/interop/cpp/no_prelude/function_param_struct.carbon | ||
// TIP: To dump output, run: | ||
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/interop/cpp/no_prelude/function_param_struct.carbon | ||
|
||
// ============================================================================ | ||
// Declaration | ||
// ============================================================================ | ||
|
||
// --- decl.h | ||
|
||
struct S; | ||
|
||
auto foo(S) -> void; | ||
|
||
// --- fail_todo_import_decl.carbon | ||
|
||
library "[[@TEST_NAME]]"; | ||
|
||
import Cpp library "decl.h"; | ||
|
||
fn F() { | ||
// CHECK:STDERR: fail_todo_import_decl.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: struct S` [SemanticsTodo] | ||
// CHECK:STDERR: Cpp.foo({}); | ||
// CHECK:STDERR: ^~~~~~~ | ||
// CHECK:STDERR: fail_todo_import_decl.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] | ||
// CHECK:STDERR: Cpp.foo({}); | ||
// CHECK:STDERR: ^~~~~~~ | ||
// CHECK:STDERR: | ||
Cpp.foo({}); | ||
} | ||
|
||
// ============================================================================ | ||
// Definition | ||
// ============================================================================ | ||
|
||
// --- definition.h | ||
|
||
struct S {}; | ||
|
||
auto foo(S) -> void; | ||
|
||
// --- fail_todo_import_definition.carbon | ||
|
||
library "[[@TEST_NAME]]"; | ||
|
||
import Cpp library "definition.h"; | ||
|
||
fn F() { | ||
// CHECK:STDERR: fail_todo_import_definition.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: struct S` [SemanticsTodo] | ||
// CHECK:STDERR: Cpp.foo({}); | ||
// CHECK:STDERR: ^~~~~~~ | ||
// CHECK:STDERR: fail_todo_import_definition.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] | ||
// CHECK:STDERR: Cpp.foo({}); | ||
// CHECK:STDERR: ^~~~~~~ | ||
// CHECK:STDERR: | ||
Cpp.foo({}); | ||
} | ||
|
||
// CHECK:STDOUT: --- fail_todo_import_decl.carbon | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: constants { | ||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] | ||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] | ||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: imports { | ||
// CHECK:STDOUT: %Cpp: <namespace> = namespace file.%Cpp.import_cpp, [concrete] { | ||
// CHECK:STDOUT: .foo = <error> | ||
// CHECK:STDOUT: import Cpp//... | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: file { | ||
// CHECK:STDOUT: package: <namespace> = namespace [concrete] { | ||
// CHECK:STDOUT: .Cpp = imports.%Cpp | ||
// CHECK:STDOUT: .F = %F.decl | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { | ||
// CHECK:STDOUT: import Cpp "decl.h" | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: fn @F() { | ||
// CHECK:STDOUT: !entry: | ||
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] | ||
// CHECK:STDOUT: %foo.ref: <error> = name_ref foo, <error> [concrete = <error>] | ||
// CHECK:STDOUT: %.loc14: %empty_struct_type = struct_literal () | ||
// CHECK:STDOUT: return | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: --- fail_todo_import_definition.carbon | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: constants { | ||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] | ||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] | ||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: imports { | ||
// CHECK:STDOUT: %Cpp: <namespace> = namespace file.%Cpp.import_cpp, [concrete] { | ||
// CHECK:STDOUT: .foo = <error> | ||
// CHECK:STDOUT: import Cpp//... | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: file { | ||
// CHECK:STDOUT: package: <namespace> = namespace [concrete] { | ||
// CHECK:STDOUT: .Cpp = imports.%Cpp | ||
// CHECK:STDOUT: .F = %F.decl | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { | ||
// CHECK:STDOUT: import Cpp "definition.h" | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: | ||
// CHECK:STDOUT: fn @F() { | ||
// CHECK:STDOUT: !entry: | ||
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] | ||
// CHECK:STDOUT: %foo.ref: <error> = name_ref foo, <error> [concrete = <error>] | ||
// CHECK:STDOUT: %.loc14: %empty_struct_type = struct_literal () | ||
// CHECK:STDOUT: return | ||
// CHECK:STDOUT: } | ||
// CHECK:STDOUT: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe this can be
struct S
to not confuse things withfn F
in the next file splitThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in #5537.
This PR is just about moving the tests to a different file, so I'll update it after #5537 is merged.