diff --git a/clang/lib/Parse/BSC/ParseDeclBSC.cpp b/clang/lib/Parse/BSC/ParseDeclBSC.cpp index e83e2b6e780306ad6917296833bb71d1d6081514..78b1a3093240c16aea1ab7c6059199805562c88e 100644 --- a/clang/lib/Parse/BSC/ParseDeclBSC.cpp +++ b/clang/lib/Parse/BSC/ParseDeclBSC.cpp @@ -555,7 +555,7 @@ Parser::DeclGroupPtrTy Parser::ParseImplTraitDeclaration() { Trait = TTD->getTemplatedDecl(); } } - if (!Trait) { + if (!Trait || Trait->isInvalidDecl() || !Trait->isCompleteDefinition()) { Diag(Tok.getLocation(), diag::err_unexpected_token_for_impl_trait_decl); SkipUntil(tok::semi); return nullptr; diff --git a/clang/test/BSC/Negative/Trait/GenericTrait/partitially_define/partitially_define.cbs b/clang/test/BSC/Negative/Trait/GenericTrait/partitially_define/partitially_define.cbs new file mode 100644 index 0000000000000000000000000000000000000000..1086e97f5d31f492f651c62db6ac085b703eefb8 --- /dev/null +++ b/clang/test/BSC/Negative/Trait/GenericTrait/partitially_define/partitially_define.cbs @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +trait T; // expected-error {{invalid syntax, semi not expected after 'trait T'}} +impl trait T for int; // expected-error {{unexpected token for ImplTraitDecl}} + +trait T*; // expected-error {{expected identifier or '('}} +impl trait T for int; // expected-error {{unexpected token for ImplTraitDecl}} \ No newline at end of file