mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 12:11:04 +01:00
Implement unused pattern bindings, continued (#6518)
Implementation of unused pattern bindings #2022, continued. Whereas previous PR #6460 took care of parsing, and PR #6479 prepared the stage by using _ in some test cases, this PR has the the actual implementation, using a simple dataflow analysis. --------- Co-authored-by: Burak Emir <bqe@google.com> Co-authored-by: jonmeow <jperkins@google.com>
This commit is contained in:
co-authored by
Burak Emir
jonmeow
parent
bea24a8bee
commit
fdb188ccfd
+32
-32
@@ -30,9 +30,9 @@ library "[[@TEST_NAME]]";
|
||||
import Cpp library "global_scope.h";
|
||||
|
||||
fn MyF() {
|
||||
let local: Cpp.C = Cpp.global;
|
||||
let local_ptr: Cpp.C* = Cpp.global_ptr;
|
||||
let local_ref: Cpp.C* = Cpp.global_ref;
|
||||
let unused local: Cpp.C = Cpp.global;
|
||||
let unused local_ptr: Cpp.C* = Cpp.global_ptr;
|
||||
let unused local_ref: Cpp.C* = Cpp.global_ref;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
@@ -55,18 +55,18 @@ library "[[@TEST_NAME]]";
|
||||
import Cpp library "unsupported_type.h";
|
||||
|
||||
fn MyF() {
|
||||
// CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+11]]:14: note: in `Cpp` name lookup for `UnusupportedType` [InCppNameLookup]
|
||||
// CHECK:STDERR: let local: Cpp.UnusupportedType = Cpp.global;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+11]]:21: note: in `Cpp` name lookup for `UnusupportedType` [InCppNameLookup]
|
||||
// CHECK:STDERR: let unused local: Cpp.UnusupportedType = Cpp.global;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
// CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+7]]:37: error: semantics TODO: `Unsupported: var type: UnusupportedType` [SemanticsTodo]
|
||||
// CHECK:STDERR: let local: Cpp.UnusupportedType = Cpp.global;
|
||||
// CHECK:STDERR: ^~~~~~~~~~
|
||||
// CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+4]]:37: note: in `Cpp` name lookup for `global` [InCppNameLookup]
|
||||
// CHECK:STDERR: let local: Cpp.UnusupportedType = Cpp.global;
|
||||
// CHECK:STDERR: ^~~~~~~~~~
|
||||
// CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+7]]:44: error: semantics TODO: `Unsupported: var type: UnusupportedType` [SemanticsTodo]
|
||||
// CHECK:STDERR: let unused local: Cpp.UnusupportedType = Cpp.global;
|
||||
// CHECK:STDERR: ^~~~~~~~~~
|
||||
// CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+4]]:44: note: in `Cpp` name lookup for `global` [InCppNameLookup]
|
||||
// CHECK:STDERR: let unused local: Cpp.UnusupportedType = Cpp.global;
|
||||
// CHECK:STDERR: ^~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
let local: Cpp.UnusupportedType = Cpp.global;
|
||||
let unused local: Cpp.UnusupportedType = Cpp.global;
|
||||
}
|
||||
|
||||
// CHECK:STDOUT: --- import_global_scope.carbon
|
||||
@@ -136,40 +136,40 @@ fn MyF() {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %local.patt: %pattern_type.217 = value_binding_pattern local [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Cpp.ref.loc7_22: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc7_29: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %global.ref: ref %C = name_ref global, imports.%global.var [concrete = imports.%global.var]
|
||||
// CHECK:STDOUT: %.loc7_17: type = splice_block %C.ref.loc7 [concrete = constants.%C] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc7_14: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %.loc7_24: type = splice_block %C.ref.loc7 [concrete = constants.%C] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc7_21: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %C.ref.loc7: type = name_ref C, imports.%C.decl [concrete = constants.%C]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc7_25: %C = acquire_value %global.ref
|
||||
// CHECK:STDOUT: %local: %C = value_binding local, %.loc7_25
|
||||
// CHECK:STDOUT: %.loc7_32: %C = acquire_value %global.ref
|
||||
// CHECK:STDOUT: %local: %C = value_binding local, %.loc7_32
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %local_ptr.patt: %pattern_type.a31 = value_binding_pattern local_ptr [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Cpp.ref.loc8_27: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc8_34: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %global_ptr.ref: ref %ptr.d9e = name_ref global_ptr, imports.%global_ptr.var [concrete = imports.%global_ptr.var]
|
||||
// CHECK:STDOUT: %.loc8_23: type = splice_block %ptr.loc8 [concrete = constants.%ptr.d9e] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc8_18: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %.loc8_30: type = splice_block %ptr.loc8 [concrete = constants.%ptr.d9e] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc8_25: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %C.ref.loc8: type = name_ref C, imports.%C.decl [concrete = constants.%C]
|
||||
// CHECK:STDOUT: %ptr.loc8: type = ptr_type %C.ref.loc8 [concrete = constants.%ptr.d9e]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc8_30: %ptr.d9e = acquire_value %global_ptr.ref
|
||||
// CHECK:STDOUT: %local_ptr: %ptr.d9e = value_binding local_ptr, %.loc8_30
|
||||
// CHECK:STDOUT: %.loc8_37: %ptr.d9e = acquire_value %global_ptr.ref
|
||||
// CHECK:STDOUT: %local_ptr: %ptr.d9e = value_binding local_ptr, %.loc8_37
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %local_ref.patt: %pattern_type.a31 = value_binding_pattern local_ref [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Cpp.ref.loc9_27: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc9_34: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %global_ref.ref: ref %const = name_ref global_ref, imports.%global_ref.var [concrete = imports.%global_ref.var]
|
||||
// CHECK:STDOUT: %.loc9_23: type = splice_block %ptr.loc9 [concrete = constants.%ptr.d9e] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc9_18: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %.loc9_30: type = splice_block %ptr.loc9 [concrete = constants.%ptr.d9e] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc9_25: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C]
|
||||
// CHECK:STDOUT: %ptr.loc9: type = ptr_type %C.ref.loc9 [concrete = constants.%ptr.d9e]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc9_30.1: ref %ptr.d9e = as_compatible %global_ref.ref [concrete = constants.%global_ref.var]
|
||||
// CHECK:STDOUT: %.loc9_30.2: ref %ptr.d9e = converted %global_ref.ref, %.loc9_30.1 [concrete = constants.%global_ref.var]
|
||||
// CHECK:STDOUT: %.loc9_30.3: %ptr.d9e = acquire_value %.loc9_30.2
|
||||
// CHECK:STDOUT: %local_ref: %ptr.d9e = value_binding local_ref, %.loc9_30.3
|
||||
// CHECK:STDOUT: %.loc9_37.1: ref %ptr.d9e = as_compatible %global_ref.ref [concrete = constants.%global_ref.var]
|
||||
// CHECK:STDOUT: %.loc9_37.2: ref %ptr.d9e = converted %global_ref.ref, %.loc9_37.1 [concrete = constants.%global_ref.var]
|
||||
// CHECK:STDOUT: %.loc9_37.3: %ptr.d9e = acquire_value %.loc9_37.2
|
||||
// CHECK:STDOUT: %local_ref: %ptr.d9e = value_binding local_ref, %.loc9_37.3
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -210,10 +210,10 @@ fn MyF() {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %local.patt: <error> = value_binding_pattern local [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Cpp.ref.loc22_37: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc22_44: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %global.ref: <error> = name_ref global, <error> [concrete = <error>]
|
||||
// CHECK:STDOUT: %.1: <error> = splice_block <error> [concrete = <error>] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc22_14: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %Cpp.ref.loc22_21: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %UnusupportedType.ref: <error> = name_ref UnusupportedType, <error> [concrete = <error>]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %local: <error> = value_binding local, <error> [concrete = <error>]
|
||||
|
||||
@@ -24,7 +24,7 @@ library "[[@TEST_NAME]]";
|
||||
import Cpp library "namespace.h";
|
||||
|
||||
fn MyF() {
|
||||
let local: Cpp.N.C = Cpp.N.global;
|
||||
let unused local: Cpp.N.C = Cpp.N.global;
|
||||
}
|
||||
|
||||
// --- type_in_namespace.carbon
|
||||
|
||||
Reference in New Issue
Block a user