// 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 // TIP: To test this file alone, run: // TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/parse/testdata/generics/interface/fail_associated_constants.carbon // TIP: To dump output, run: // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/parse/testdata/generics/interface/fail_associated_constants.carbon // --- fail_tuple_pattern.carbon library "[[@TEST_NAME]]"; interface I { // CHECK:STDERR: fail_tuple_pattern.carbon:[[@LINE+4]]:7: error: expected identifier in associated constant declaration [ExpectedAssociatedConstantIdentifier] // CHECK:STDERR: let (T:! type, U:! type); // CHECK:STDERR: ^ // CHECK:STDERR: let (T:! type, U:! type); } // --- fail_tuple_pattern_with_default.carbon library "[[@TEST_NAME]]"; interface I { // CHECK:STDERR: fail_tuple_pattern_with_default.carbon:[[@LINE+4]]:15: error: expected identifier in associated constant declaration [ExpectedAssociatedConstantIdentifier] // CHECK:STDERR: default let (T:! type, U:! type) = ({}, {}); // CHECK:STDERR: ^ // CHECK:STDERR: default let (T:! type, U:! type) = ({}, {}); } // --- fail_var_pattern.carbon library "[[@TEST_NAME]]"; interface I { // CHECK:STDERR: fail_var_pattern.carbon:[[@LINE+4]]:7: error: expected identifier in associated constant declaration [ExpectedAssociatedConstantIdentifier] // CHECK:STDERR: let var T:! type; // CHECK:STDERR: ^~~ // CHECK:STDERR: let var T:! type; } // --- fail_var_pattern_with_default.carbon library "[[@TEST_NAME]]"; interface I { // CHECK:STDERR: fail_var_pattern_with_default.carbon:[[@LINE+4]]:15: error: expected identifier in associated constant declaration [ExpectedAssociatedConstantIdentifier] // CHECK:STDERR: default let var T:! type = {}; // CHECK:STDERR: ^~~ // CHECK:STDERR: default let var T:! type = {}; } // --- fail_not_constant.carbon library "[[@TEST_NAME]]"; interface I { // CHECK:STDERR: fail_not_constant.carbon:[[@LINE+4]]:8: error: found runtime binding pattern in associated constant declaration; expected a `:!` binding [ExpectedAssociatedConstantColonExclaim] // CHECK:STDERR: let a: {.b: ()}; // CHECK:STDERR: ^ // CHECK:STDERR: let a: {.b: ()}; } // --- fail_template.carbon library "[[@TEST_NAME]]"; interface I { // CHECK:STDERR: fail_template.carbon:[[@LINE+4]]:7: error: expected identifier in associated constant declaration [ExpectedAssociatedConstantIdentifier] // CHECK:STDERR: let template T:! type; // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: let template T:! type; } // --- fail_underscore.carbon library "[[@TEST_NAME]]"; interface I { // CHECK:STDERR: fail_underscore.carbon:[[@LINE+4]]:7: error: expected identifier in associated constant declaration [ExpectedAssociatedConstantIdentifier] // CHECK:STDERR: let _:! {}; // CHECK:STDERR: ^ // CHECK:STDERR: let _:! {}; } // CHECK:STDOUT: - filename: fail_tuple_pattern.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, // CHECK:STDOUT: {kind: 'LibraryName', text: '"tuple_pattern"'}, // CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'I'}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_tuple_pattern_with_default.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, // CHECK:STDOUT: {kind: 'LibraryName', text: '"tuple_pattern_with_default"'}, // CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'I'}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, // CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_var_pattern.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, // CHECK:STDOUT: {kind: 'LibraryName', text: '"var_pattern"'}, // CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'I'}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_var_pattern_with_default.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, // CHECK:STDOUT: {kind: 'LibraryName', text: '"var_pattern_with_default"'}, // CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'I'}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, // CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_not_constant.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, // CHECK:STDOUT: {kind: 'LibraryName', text: '"not_constant"'}, // CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'I'}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_template.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, // CHECK:STDOUT: {kind: 'LibraryName', text: '"template"'}, // CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'I'}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_underscore.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, // CHECK:STDOUT: {kind: 'LibraryName', text: '"underscore"'}, // CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'I'}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ]