File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -861,6 +861,8 @@ void ASTDeclReader::VisitFunctionDecl(FunctionDecl *FD) {
861861 // after everything else is read.
862862
863863 FD ->setStorageClass (static_cast <StorageClass>(Record.readInt ()));
864+ FD ->setCheckedSpecifier (static_cast <CheckedScopeSpecifier>(Record.readInt ()));
865+ FD ->setWrittenCheckedSpecifier (static_cast <CheckedScopeSpecifier>(Record.readInt ()));
864866 FD ->setInlineSpecified (Record.readInt ());
865867 FD ->setImplicitlyInline (Record.readInt ());
866868 FD ->setExplicitSpecified (Record.readInt ());
Original file line number Diff line number Diff line change @@ -161,8 +161,8 @@ void ASTStmtReader::VisitCompoundStmt(CompoundStmt *S) {
161161 VisitStmt (S);
162162 SmallVector<Stmt *, 16 > Stmts;
163163 unsigned NumStmts = Record.readInt ();
164- S->setCheckedSpecifiers (( CheckedScopeSpecifier) Record.readInt ());
165- S->setWrittenCheckedSpecifiers (( CheckedScopeSpecifier) Record.readInt ());
164+ S->setCheckedSpecifiers (static_cast < CheckedScopeSpecifier>( Record.readInt () ));
165+ S->setWrittenCheckedSpecifiers (static_cast < CheckedScopeSpecifier>( Record.readInt () ));
166166 while (NumStmts--)
167167 Stmts.push_back (Record.readSubStmt ());
168168 S->setStmts (Stmts);
Original file line number Diff line number Diff line change @@ -538,6 +538,8 @@ void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) {
538538 // FunctionDecl's body is handled last at ASTWriterDecl::Visit,
539539 // after everything else is written.
540540 Record.push_back (static_cast <int >(D->getStorageClass ())); // FIXME: stable encoding
541+ Record.push_back (D->getCheckedSpecifier ());
542+ Record.push_back (D->getWrittenCheckedSpecifier ());
541543 Record.push_back (D->isInlineSpecified ());
542544 Record.push_back (D->isInlined ());
543545 Record.push_back (D->isExplicitSpecified ());
@@ -2130,6 +2132,8 @@ void ASTWriter::WriteDeclAbbrevs() {
21302132 // FunctionDecl
21312133 Abv->Add (BitCodeAbbrevOp (BitCodeAbbrevOp::Fixed, 11 )); // IDNS
21322134 Abv->Add (BitCodeAbbrevOp (BitCodeAbbrevOp::Fixed, 3 )); // StorageClass
2135+ Abv->Add (BitCodeAbbrevOp (BitCodeAbbrevOp::Fixed, 2 )); // CheckedScopeSpecifier
2136+ Abv->Add (BitCodeAbbrevOp (BitCodeAbbrevOp::Fixed, 2 )); // WrittenCheckedScopeSpecifier
21332137 Abv->Add (BitCodeAbbrevOp (BitCodeAbbrevOp::Fixed, 1 )); // Inline
21342138 Abv->Add (BitCodeAbbrevOp (BitCodeAbbrevOp::Fixed, 1 )); // InlineSpecified
21352139 Abv->Add (BitCodeAbbrevOp (BitCodeAbbrevOp::Fixed, 1 )); // ExplicitSpecified
Original file line number Diff line number Diff line change 3434// CHECK: _Unchecked
3535// CHECK-NOT {{checking-state}}
3636
37- // TODO: GitHub issue #704: add function declarations with checked scope specifiers
37+ // CHECK-NEXT: FunctionDecl
38+ // CHECK: f5
39+ // CHECK: checked
40+ // CHECK-NEXT: CompoundStmt
41+ // CHECK: checking-state bounds-and-types
42+
43+ // CHECK-NEXT: FunctionDecl
44+ // CHECK: f6
45+ // CHECK: checked bounds_only
46+ // CHECK-NEXT: CompoundStmt
47+ // CHECK: checking-state bounds
48+
49+ // CHECK-NEXT: FunctionDecl
50+ // CHECK: f7
51+ // CHECK: unchecked
52+ // CHECK-NEXT: CompoundStmt
53+ // CHECK-NOT: {{_Checked|_Unchecked|checking-state}}
54+
55+ // CHECK-NEXT: FunctionDecl
56+ // CHECK: f8
57+ // CHECK: checked
58+ // CHECK-NEXT: CompoundStmt
59+ // CHECK: checking-state bounds
Original file line number Diff line number Diff line change @@ -13,4 +13,10 @@ void f3(void) _Checked _Bounds_only {}
1313
1414void f4 (void ) _Unchecked {}
1515
16- // TODO: GitHub issue #704: add function declarations with checked scope specifiers
16+ _Checked void f5 (void ) {}
17+
18+ _Checked _Bounds_only void f6 (void ) {}
19+
20+ _Unchecked void f7 (void ) {}
21+
22+ _Checked void f8 (void ) _Checked _Bounds_only {}
You can’t perform that action at this time.
0 commit comments