diff --git a/clang/lib/Analysis/BSCOwnership.cpp b/clang/lib/Analysis/BSCOwnership.cpp index b11bff32e1ced727e023c43c3c0ec0aa4b4fd61c..571073c36a81f0a722ed3ceb62b1e22dec3cb84c 100644 --- a/clang/lib/Analysis/BSCOwnership.cpp +++ b/clang/lib/Analysis/BSCOwnership.cpp @@ -820,6 +820,9 @@ Ownership::OwnershipStatus::checkOPSUse(const VarDecl *VD, } else if (is(VD, Ownership::Status::PartialMoved)) { diags.push_back(DiagInfo(Loc, DiagKind::InvalidUseOfPartiallyMoved, VD->getNameAsString(), collectMovedFields(VD))); + } else if (is(VD, Ownership::Status::AllMoved)) { + diags.push_back(DiagInfo(Loc, DiagKind::InvalidUseOfAllMoved, + VD->getNameAsString(), collectMovedFields(VD))); } } if (!isGetAddr) { diff --git a/clang/lib/Frontend/Rewrite/RewriteBSC.cpp b/clang/lib/Frontend/Rewrite/RewriteBSC.cpp index 69d92b31c2cd8a6b14170169610e020a97ed5fc2..c296d406c3680f4d4b4529e13ac7e0c4504ac1d5 100644 --- a/clang/lib/Frontend/Rewrite/RewriteBSC.cpp +++ b/clang/lib/Frontend/Rewrite/RewriteBSC.cpp @@ -169,13 +169,13 @@ void RewriteBSC::RewriteInclude() { while (*BufPtr == ' ' || *BufPtr == '\t') if (++BufPtr == MainBufEnd) return; - if (*BufPtr == '"') { + if (*BufPtr == '"' || *BufPtr == '<') { if (++BufPtr == MainBufEnd) return; std::string Buf = ""; SourceLocation StartLoc = LocStart.getLocWithOffset(BufPtr - MainBufStart); - while (*BufPtr != '"') { + while (*BufPtr != '"' && *BufPtr != '>') { Buf += *BufPtr; if (++BufPtr == MainBufEnd) return; diff --git a/clang/test/BSC/Negative/Ownership/RuleCheck/struct/struct.cbs b/clang/test/BSC/Negative/Ownership/RuleCheck/struct/struct.cbs index 133921bf37e50c68fd5cf06db80bbde67e4829a7..a10dd3a1b24f54b9cff208f2699ee983d75a849d 100644 --- a/clang/test/BSC/Negative/Ownership/RuleCheck/struct/struct.cbs +++ b/clang/test/BSC/Negative/Ownership/RuleCheck/struct/struct.cbs @@ -68,6 +68,13 @@ void func12(struct A * owned a) { } // expected-error {{memory leak of value: `p`}} // expected-error@-1 {{field memory leak of value: `p`, p.a1.b1, p.a1.b2, p.a1.b3, p.a1.b3.c1, p.a1.b3.c2, p.a2, p.a2.b1, p.a2.b2, p.a2.b3... are leak}} +void func13(struct B* owned bp) { + struct B b = *bp; + struct B* owned bo = bp; // expected-error {{use of all moved value: `bp`}} +} // expected-error {{memory leak of value: `b`}} + // expected-error@-1 {{memory leak of value: `bo`}} + // expected-error@-2 {{field memory leak of value: `bo`, bo.b1, bo.b2, bo.b3, bo.b3.c1, bo.b3.c2 are leak}} + void func14(struct B b) { int *p1 = (int *)b.b1; int *p2 = (int *)b.b2;