mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-01 22:02:45 +01:00
This removes the risk of accidentally performing a vector copy when calling these functions, and is a preparation step towards the new node block allocation design. This required changing how we build call expressions. Instead of finishing the argument block and then later adding a return slot, we now delay finishing the argument block and checking for conversions to parameter types until after we've added the return slot to it.
97 lines
3.7 KiB
Plaintext
97 lines
3.7 KiB
Plaintext
// 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
|
|
|
|
fn Run0() {}
|
|
fn Run1(a: i32) {}
|
|
fn Run2(a: i32, b: i32) {}
|
|
|
|
fn Main() {
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE+6]]:7: 1 argument(s) passed to function expecting 0 argument(s).
|
|
// CHECK:STDERR: Run0(1);
|
|
// CHECK:STDERR: ^
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE-8]]:1: Calling function declared here.
|
|
// CHECK:STDERR: fn Run0() {}
|
|
// CHECK:STDERR: ^
|
|
Run0(1);
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE+6]]:7: 2 argument(s) passed to function expecting 0 argument(s).
|
|
// CHECK:STDERR: Run0(0, 1);
|
|
// CHECK:STDERR: ^
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE-15]]:1: Calling function declared here.
|
|
// CHECK:STDERR: fn Run0() {}
|
|
// CHECK:STDERR: ^
|
|
Run0(0, 1);
|
|
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE+6]]:7: 0 argument(s) passed to function expecting 1 argument(s).
|
|
// CHECK:STDERR: Run1();
|
|
// CHECK:STDERR: ^
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE-22]]:1: Calling function declared here.
|
|
// CHECK:STDERR: fn Run1(a: i32) {}
|
|
// CHECK:STDERR: ^
|
|
Run1();
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE+6]]:7: 2 argument(s) passed to function expecting 1 argument(s).
|
|
// CHECK:STDERR: Run1(0, 1);
|
|
// CHECK:STDERR: ^
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE-29]]:1: Calling function declared here.
|
|
// CHECK:STDERR: fn Run1(a: i32) {}
|
|
// CHECK:STDERR: ^
|
|
Run1(0, 1);
|
|
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE+6]]:7: 0 argument(s) passed to function expecting 2 argument(s).
|
|
// CHECK:STDERR: Run2();
|
|
// CHECK:STDERR: ^
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE-36]]:1: Calling function declared here.
|
|
// CHECK:STDERR: fn Run2(a: i32, b: i32) {}
|
|
// CHECK:STDERR: ^
|
|
Run2();
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE+6]]:7: 1 argument(s) passed to function expecting 2 argument(s).
|
|
// CHECK:STDERR: Run2(0);
|
|
// CHECK:STDERR: ^
|
|
// CHECK:STDERR: fail_param_count.carbon:[[@LINE-43]]:1: Calling function declared here.
|
|
// CHECK:STDERR: fn Run2(a: i32, b: i32) {}
|
|
// CHECK:STDERR: ^
|
|
Run2(0);
|
|
}
|
|
|
|
// CHECK:STDOUT: file "fail_param_count.carbon" {
|
|
// CHECK:STDOUT: %.loc7 = fn_decl @Run0
|
|
// CHECK:STDOUT: %.loc8 = fn_decl @Run1
|
|
// CHECK:STDOUT: %.loc9 = fn_decl @Run2
|
|
// CHECK:STDOUT: %.loc11 = fn_decl @Main
|
|
// CHECK:STDOUT: }
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT: fn @Run0() {
|
|
// CHECK:STDOUT: !entry:
|
|
// CHECK:STDOUT: return
|
|
// CHECK:STDOUT: }
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT: fn @Run1(%a: i32) {
|
|
// CHECK:STDOUT: !entry:
|
|
// CHECK:STDOUT: return
|
|
// CHECK:STDOUT: }
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT: fn @Run2(%a: i32, %b: i32) {
|
|
// CHECK:STDOUT: !entry:
|
|
// CHECK:STDOUT: return
|
|
// CHECK:STDOUT: }
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT: fn @Main() {
|
|
// CHECK:STDOUT: !entry:
|
|
// CHECK:STDOUT: %.loc18_8.1: i32 = int_literal 1
|
|
// CHECK:STDOUT: %.loc18_8.2: i32 = stub_reference %.loc18_8.1
|
|
// CHECK:STDOUT: %.loc18_7: type = tuple_type ()
|
|
// CHECK:STDOUT: %.loc25_8.1: i32 = int_literal 0
|
|
// CHECK:STDOUT: %.loc25_8.2: i32 = stub_reference %.loc25_8.1
|
|
// CHECK:STDOUT: %.loc25_11.1: i32 = int_literal 1
|
|
// CHECK:STDOUT: %.loc25_11.2: i32 = stub_reference %.loc25_11.1
|
|
// CHECK:STDOUT: %.loc40_8.1: i32 = int_literal 0
|
|
// CHECK:STDOUT: %.loc40_8.2: i32 = stub_reference %.loc40_8.1
|
|
// CHECK:STDOUT: %.loc40_11.1: i32 = int_literal 1
|
|
// CHECK:STDOUT: %.loc40_11.2: i32 = stub_reference %.loc40_11.1
|
|
// CHECK:STDOUT: %.loc55_8.1: i32 = int_literal 0
|
|
// CHECK:STDOUT: %.loc55_8.2: i32 = stub_reference %.loc55_8.1
|
|
// CHECK:STDOUT: return
|
|
// CHECK:STDOUT: }
|