Skip to content

Commit a131966

Browse files
committed
Swift: make SuccessfullyExtractedFiles.ql more precise
This is done by adding a `isSuccessfullyExtracted` predicate that is filled for primary files at the very end of the extractor invocation if the frontend was performed successfully. If for example the extractor crashes this will therefore not be filled. The upgrade script is written so that `SuccessfullyExtractedFiles.ql` on an upgraded script will give exactly the same results as before it.
1 parent b0f8037 commit a131966

File tree

19 files changed

+10472
-16
lines changed

19 files changed

+10472
-16
lines changed

swift/downgrades/c2f01f2beb67e5a57e9df9b6d1c51e35e8d5b0a2/old.dbscheme

Lines changed: 2601 additions & 0 deletions
Large diffs are not rendered by default.

swift/downgrades/c2f01f2beb67e5a57e9df9b6d1c51e35e8d5b0a2/swift.dbscheme

Lines changed: 2596 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
description: Revert adding file_is_successfully_extracted
2+
compatibility: full
3+
file_is_successfully_extracted.rel: delete

swift/extractor/infra/SwiftLocationExtractor.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,15 @@ void SwiftLocationExtractor::attachLocation(const swift::SourceManager& sourceMa
3030
trap.emit(LocatableLocationsTrap{locatableLabel, entry.id});
3131
}
3232

33-
void SwiftLocationExtractor::emitFile(swift::SourceFile* file) {
33+
TrapLabel<FileTag> SwiftLocationExtractor::emitFile(swift::SourceFile* file) {
3434
if (file) {
35-
fetchFileLabel(resolvePath(file->getFilename()));
35+
return emitFile(std::string_view{file->getFilename()});
3636
}
37+
return undefined_label;
38+
}
39+
40+
TrapLabel<FileTag> SwiftLocationExtractor::emitFile(const std::filesystem::path& file) {
41+
return fetchFileLabel(resolvePath(file));
3742
}
3843

3944
void SwiftLocationExtractor::attachLocation(const swift::SourceManager& sourceManager,

swift/extractor/infra/SwiftLocationExtractor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ class SwiftLocationExtractor {
1818
public:
1919
explicit SwiftLocationExtractor(TrapDomain& trap) : trap(trap) {}
2020

21-
void emitFile(swift::SourceFile* file);
21+
TrapLabel<FileTag> emitFile(swift::SourceFile* file);
22+
TrapLabel<FileTag> emitFile(const std::filesystem::path& file);
2223

2324
template <typename Locatable>
2425
void attachLocation(const swift::SourceManager& sourceManager,

swift/extractor/main.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ class Observer : public swift::FrontendObserver {
9595
codeql::extractExtractLazyDeclarations(state, compiler);
9696
}
9797

98+
void markSuccessfullyExtractedFiles() {
99+
codeql::SwiftLocationExtractor locExtractor{invocationTrap};
100+
for (const auto& src : state.sourceFiles) {
101+
auto fileLabel = locExtractor.emitFile(src);
102+
invocationTrap.emit(codeql::FileIsSuccessfullyExtractedTrap{fileLabel});
103+
}
104+
}
105+
98106
private:
99107
codeql::SwiftExtractorState state;
100108
codeql::TrapDomain invocationTrap{invocationTrapDomain(state)};
@@ -195,5 +203,9 @@ int main(int argc, char** argv) {
195203
int frontend_rc = swift::performFrontend(configuration.frontendOptions, "swift-extractor",
196204
(void*)main, &observer);
197205

206+
if (frontend_rc == 0) {
207+
observer.markSuccessfullyExtractedFiles();
208+
}
209+
198210
return frontend_rc;
199211
}

swift/ql/.generated.list

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,14 +378,14 @@ ql/lib/codeql/swift/generated/DbLocation.qll b9baea963d9fa82068986512c0649d10508
378378
ql/lib/codeql/swift/generated/Diagnostics.qll d2ee2db55e932dcaee95fcc1164a51ffbe1a78d86ee0f50aabb299b458462afe 566d554d579cadde26dc4d1d6b1750ca800511201b737b629f15b6f873af3733
379379
ql/lib/codeql/swift/generated/Element.qll 9caf84a1da2509f5b01a22d6597126c573ae63ec3e8c6af6fd6fcc7ead0b4e82 70deb2238509d5ed660369bf763c796065d92efd732469088cdf67f68bacd796
380380
ql/lib/codeql/swift/generated/ErrorElement.qll 4b032abe8ffb71376a29c63e470a52943ace2527bf7b433c97a8bf716f9ad102 4f2b1be162a5c275e3264dbc51bf98bce8846d251be8490a0d4b16cbc85f630f
381-
ql/lib/codeql/swift/generated/File.qll 61454459f5f1ae378bd4970ad1da4f39f3e696bac8a5eebdd162f131995c5316 3e6805f8858cd55dd0e0d0e5aeab923d6a55292dbf98b0029db1ae0208efe684
381+
ql/lib/codeql/swift/generated/File.qll f88c485883dd9b2b4a366080e098372912e03fb3177e5cae58aa4449c2b03399 0333c49e3a11c48e6146a7f492ee31ac022d80150fc3f8bfafc3c8f94d66ff76
382382
ql/lib/codeql/swift/generated/Locatable.qll bdc98b9fb7788f44a4bf7e487ee5bd329473409950a8e9f116d61995615ad849 0b36b4fe45e2aa195e4bb70c50ea95f32f141b8e01e5f23466c6427dd9ab88fb
383383
ql/lib/codeql/swift/generated/Location.qll 851766e474cdfdfa67da42e0031fc42dd60196ff5edd39d82f08d3e32deb84c1 b29b2c37672f5acff15f1d3c5727d902f193e51122327b31bd27ec5f877bca3b
384384
ql/lib/codeql/swift/generated/OtherAvailabilitySpec.qll 0e26a203b26ff0581b7396b0c6d1606feec5cc32477f676585cdec4911af91c5 0e26a203b26ff0581b7396b0c6d1606feec5cc32477f676585cdec4911af91c5
385-
ql/lib/codeql/swift/generated/ParentChild.qll 87c955fbd71e8c720b306b8dc43db354a120a4f984404f83b4dfea4dc8969380 6f7464ecd8ca04b6aa261139b36a162e5b0636237d514b8431ef4f97a1c603dc
385+
ql/lib/codeql/swift/generated/ParentChild.qll 0ac2139b8b2e172858262d80950a0212b21fe46bf6af7259d9058fb7193f8242 6f7464ecd8ca04b6aa261139b36a162e5b0636237d514b8431ef4f97a1c603dc
386386
ql/lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll f82d9ca416fe8bd59b5531b65b1c74c9f317b3297a6101544a11339a1cffce38 7f5c6d3309e66c134107afe55bae76dfc9a72cb7cdd6d4c3706b6b34cee09fa0
387387
ql/lib/codeql/swift/generated/PureSynthConstructors.qll 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98
388-
ql/lib/codeql/swift/generated/Raw.qll 180dc0f5d34c2e88eb864dca9ef4be0a768583fdad98e737716e031caa355a39 8561938ad09551dc45ad6b3946d599fce1839985a6f61cee63a6dd463dd14a12
388+
ql/lib/codeql/swift/generated/Raw.qll efe60f045f8a4aecedd7bfe8110c0c10539bcdcb9f17f342cf560c8d065e6aff 261825907250bb4ddeba8ccce0df29b45f13c6fb338eb41a06ea6b43e7aa9788
389389
ql/lib/codeql/swift/generated/Synth.qll af02e0b49fe7b488592687996cc74d9525d4e3fbc9d324820b310b356f4d2612 5c740a660721173e9e4e45eb701d373ca19ff14d61cdaea309b65871e0deea90
390390
ql/lib/codeql/swift/generated/SynthConstructors.qll a1b3ca33017f82124286ccad317a05484fee144fb9c3cdd2e500ce38e5efcec4 a1b3ca33017f82124286ccad317a05484fee144fb9c3cdd2e500ce38e5efcec4
391391
ql/lib/codeql/swift/generated/UnknownFile.qll 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6
@@ -661,7 +661,7 @@ ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.ql 6e06e2226
661661
ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.ql 44ccccad28d8648aa3349d9290bd1478bb021797c26bc2f8c1e3de14a42be3bd aefab61b6fa1c06c5c79d337cffb61335dca74ef9906deba12f7eaea42f9ac14
662662
ql/test/extractor-tests/generated/Comment/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
663663
ql/test/extractor-tests/generated/Diagnostics/Diagnostics.ql 6a4a9480cc929381e0337b181e5ac519a7abc6d597ebe24fb6701acf79ced86f 199c5bf8bd38e161d989e0e4db1ea1d3ddcb4d7cf571afd9112ce3ed8d9b8d2a
664-
ql/test/extractor-tests/generated/File/File.ql ab0968ae31b749da2b66462bd04e4dfb30604dba405a84594b575abfc4fa4c35 bcc0ff648b28c5ecd567e196e700272883756bbcc65296bbb880a979e3162628
664+
ql/test/extractor-tests/generated/File/File.ql 17a26e4f8aeaf3d4a38e6eb18f5d965cd62b63671b84edcd068808b4f3a999df 009a1338750bf95f715b303ac3e6a6e827c82aec2068299a97b0585ce76e9239
665665
ql/test/extractor-tests/generated/OtherAvailabilitySpec/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
666666
ql/test/extractor-tests/generated/PlatformVersionAvailabilitySpec/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
667667
ql/test/extractor-tests/generated/decl/AccessorDecl/AccessorDecl.ql 5c017af7e6b16ee68990eec12affe81eb114338bac4d445f4b231fe0f110eccc db86c828a892b0acd150a780914e7e48c280cad473d3680a453bdee03aee1e9d

swift/ql/lib/codeql/swift/generated/File.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,12 @@ module Generated {
99
* Gets the name of this file.
1010
*/
1111
string getName() { result = Synth::convertFileToRaw(this).(Raw::File).getName() }
12+
13+
/**
14+
* Holds if this file is successfully extracted.
15+
*/
16+
predicate isSuccessfullyExtracted() {
17+
Synth::convertFileToRaw(this).(Raw::File).isSuccessfullyExtracted()
18+
}
1219
}
1320
}

swift/ql/lib/codeql/swift/generated/Raw.qll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ module Raw {
4242
* Gets the name of this file.
4343
*/
4444
string getName() { files(this, result) }
45+
46+
/**
47+
* Holds if this file is successfully extracted.
48+
*/
49+
predicate isSuccessfullyExtracted() { file_is_successfully_extracted(this) }
4550
}
4651

4752
class Locatable extends @locatable, Element {

swift/ql/lib/swift.dbscheme

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ files(
7272
string name: string ref
7373
);
7474

75+
#keyset[id]
76+
file_is_successfully_extracted(
77+
int id: @file ref
78+
);
79+
7580
@locatable =
7681
@argument
7782
| @ast_node

0 commit comments

Comments
 (0)