mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Swift: extract ConsumeExpr
This commit is contained in:
@@ -202,7 +202,7 @@ MAP(swift::Expr, ExprTag)
|
||||
MAP(swift::TypeJoinExpr, void) // TODO (introduced in 5.8)
|
||||
MAP(swift::MacroExpansionExpr, void) // TODO (introduced in 5.8)
|
||||
MAP(swift::CopyExpr, CopyExprTag)
|
||||
MAP(swift::ConsumeExpr, void) // TODO (introduced in 5.9)
|
||||
MAP(swift::ConsumeExpr, ConsumeExprTag)
|
||||
MAP(swift::MaterializePackExpr, void) // TODO (introduced in 5.9)
|
||||
MAP(swift::SingleValueStmtExpr, SingleValueStmtExprTag)
|
||||
|
||||
|
||||
@@ -663,4 +663,10 @@ codeql::CopyExpr ExprTranslator::translateCopyExpr(const swift::CopyExpr& expr)
|
||||
return entry;
|
||||
}
|
||||
|
||||
codeql::ConsumeExpr ExprTranslator::translateConsumeExpr(const swift::ConsumeExpr& expr) {
|
||||
auto entry = createExprEntry(expr);
|
||||
entry.sub_expr = dispatcher.fetchLabel(expr.getSubExpr());
|
||||
return entry;
|
||||
}
|
||||
|
||||
} // namespace codeql
|
||||
|
||||
@@ -123,6 +123,7 @@ class ExprTranslator : public AstTranslatorBase<ExprTranslator> {
|
||||
codeql::PackExpansionExpr translatePackExpansionExpr(const swift::PackExpansionExpr& expr);
|
||||
codeql::PackElementExpr translatePackElementExpr(const swift::PackElementExpr& expr);
|
||||
codeql::CopyExpr translateCopyExpr(const swift::CopyExpr& expr);
|
||||
codeql::ConsumeExpr translateConsumeExpr(const swift::ConsumeExpr& expr);
|
||||
|
||||
private:
|
||||
void fillClosureExpr(const swift::AbstractClosureExpr& expr, codeql::ClosureExpr& entry);
|
||||
|
||||
15
swift/ql/.generated.list
generated
15
swift/ql/.generated.list
generated
@@ -96,6 +96,8 @@ lib/codeql/swift/elements/expr/ConditionalBridgeFromObjCExpr.qll bfe2e7142451c1d
|
||||
lib/codeql/swift/elements/expr/ConditionalBridgeFromObjCExprConstructor.qll 446d2b437a1b54e0ba3107aad57ea9a12449a70cd9565cc724b395bf88fd9e8b 7f7bd4dd2f6cb717c7868993d183fcf7634c30666a1709b9d1577ed17467f1e7
|
||||
lib/codeql/swift/elements/expr/ConditionalCheckedCastExpr.qll 61290c72da5609bcefb417a55e9d4338393af057c8634459875500710ffbeebb dadc07129e4b4ed41a8afb19a3e53ac0bf78f5b077be5f09e5609d87659a5869
|
||||
lib/codeql/swift/elements/expr/ConditionalCheckedCastExprConstructor.qll 14b761095c024474f6e475a66822e9893b4e65e35c4182be9fdc5f801eb2274d 7d62113ae891dff8e371ed89d698e2df225a7580fe371165d69f42bd88ce8ecc
|
||||
lib/codeql/swift/elements/expr/ConsumeExpr.qll 570b4d2e1fd00d304affc8fdda82e8eb04670caaab9d74a8d97928cc95a2b4e3 2634631565b40dd487face44581d2d28582cc80ae7bb97e39f74241d31a3a5e4
|
||||
lib/codeql/swift/elements/expr/ConsumeExprConstructor.qll e2fd37095422dcfa7e01fa0e7973db1b4e0f816064a0facd10009b200c941b0e 03c9ef3df9491b4a8438800d9d8c7b6d7fe562f1cc0250748f27933abfa2c989
|
||||
lib/codeql/swift/elements/expr/CopyExpr.qll f820ef6ae749267bfc198b110fb32a14e910800008eeb955a496a7e80cb8c614 4334f4938e164323d7bc58742b73f7285f16d6d641bd41ac92d5dccaa7af32eb
|
||||
lib/codeql/swift/elements/expr/CopyExprConstructor.qll 2b4944e504ab0a4884a926d5532c686004147548fc1734922d0a83d23828de56 4ef6c99b3bcc0ba58b8c040339762246eb206a4f89d0ed7ca92421b964bded17
|
||||
lib/codeql/swift/elements/expr/CovariantFunctionConversionExpr.qll 7726850cac33afed7bb0aad3a0e9d1211d7c287b0c17be4e2056ddcd99d35e86 aae0109a74e369d4d1a567473e24c4aac1e68cd4d4a920f11f8fc3b9db99cf6e
|
||||
@@ -379,7 +381,7 @@ lib/codeql/swift/elements/type/UnresolvedTypeConstructor.qll 7f75d489b4d7ce65cae
|
||||
lib/codeql/swift/elements/type/VariadicSequenceTypeConstructor.qll fc74a5a2a2effa28ef24509b20ee4373d97cf6e8c71840121bb031c6adedf584 c9b2effc1d01c13c5e6a74a111122fa79a2f6554dda3cb016d68ba397e566ec4
|
||||
lib/codeql/swift/elements/type/WeakStorageType.qll edd13dd97b53040684409e187c1f975bcada6807c919e1345d8977144dbebb6f 9434c044d264a7f5f503a6422c106c9b8fedf74aaae314174473a29ea6ed17b9
|
||||
lib/codeql/swift/elements/type/WeakStorageTypeConstructor.qll 5fdce3716aba6318522174a2c455a63480970222ae81c732fb19c6dd3ae2d271 60ea79d6943e129deba0deccb566cf9d73f78398b0f7f0212674d91287d6b2ae
|
||||
lib/codeql/swift/elements.qll f1c8fdfa57e5bf9bc19c0ca6ded891c8431c8cd98b2a53e5eb7ce36199c6bab2 f1c8fdfa57e5bf9bc19c0ca6ded891c8431c8cd98b2a53e5eb7ce36199c6bab2
|
||||
lib/codeql/swift/elements.qll 55d216f8dfeae9871c08ed202b737be068182376870ea18a0f78adb4d035f365 55d216f8dfeae9871c08ed202b737be068182376870ea18a0f78adb4d035f365
|
||||
lib/codeql/swift/generated/AstNode.qll e00d6a46b16891778531a73722ae0b5842f849328e24aebe88bc30ac9fe438c2 40eaa0072d3ffecbff48d2baf88111daa86ef0f937abf24f032f2495739ef661
|
||||
lib/codeql/swift/generated/AvailabilityInfo.qll e90fbfc3ec6830390e12a4695698d6efd8da4fa6a8a4189f466489a6dd103586 d9545da9e5d0c160679a4147001b4b1c664d9cb85ae1a169dd639c35046d274d
|
||||
lib/codeql/swift/generated/AvailabilitySpec.qll 469bbd39d38dc68f1f6fb2e0766cc25b2f813c804fec44962910d5f7777632a2 57a953a8d5cf7031283393af1b3cfbc7f5941c9062e77950b32e5b5c6ae6b191
|
||||
@@ -395,12 +397,12 @@ lib/codeql/swift/generated/KeyPathComponent.qll 55629a20538d7e8f4f4d4c7484e8bcfd
|
||||
lib/codeql/swift/generated/Locatable.qll 41f040643ea146c8044be49fddea89bdd79efd2469617c863a4b2da0b1af3364 9a964dcbc7f5ffce2ee006ce0c9a9a99a988976fcd0446af2ba1b202911d7396
|
||||
lib/codeql/swift/generated/Location.qll 5b37ecde83a871ef2089cf33e4743fc02d9cf8c676aafd9f157c59ffdb776d6b 076d8d3d2313931e8287d196854acf259700124d9c8bc591a6d36017f314260a
|
||||
lib/codeql/swift/generated/OtherAvailabilitySpec.qll 31f3667ab0dc5f93230ba876b4101898d2a5a4af306925082305eff3ad9c9c0e 31f3667ab0dc5f93230ba876b4101898d2a5a4af306925082305eff3ad9c9c0e
|
||||
lib/codeql/swift/generated/ParentChild.qll fb015f25cdff4fd65a909b98b3bb213e7948e14e152e14e789f856ec65189c70 dc0b64fc75ac329be4ddd8d69f41cc89d1dfd0f9379b764766b0b9724472907d
|
||||
lib/codeql/swift/generated/ParentChild.qll 5cf57f71329d520286af1434bdc7549ee9e657f0ca66da15379e4974ced1b1b6 66829a7cb8c7e2657e7db86eabea7495418884b4c7d77bebdc814fc481fe4d24
|
||||
lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll 3483726f6db9d978e40db75068d6a9ecad8f7c06516157fce783b26424bea729 864fedf2901de91f662a6d75a2eb7e26ed1a2a1a875a2b3c4e699dc7e7c4605e
|
||||
lib/codeql/swift/generated/PureSynthConstructors.qll 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229
|
||||
lib/codeql/swift/generated/Raw.qll d63ca7a4be4795dc6d0693ff91e7057aac20f7bfc92c772b74dd27fce845274e 4c06e31cb9016f2829cf5b67f65dca3ad83b1d7b562e985a4add223f9b5e632c
|
||||
lib/codeql/swift/generated/Synth.qll 0c32468f13063f3182e57dae315a1140617fec84f20bfe5a1dc18d9ad861747c 9a5853b0ce04b3a03172d38495a8f60702213d1d767e7716ff6e1c5e38ff162d
|
||||
lib/codeql/swift/generated/SynthConstructors.qll 1384e3f36c64c46294e14eec7998ce219e23271c5f7558a6c9ba40d018e02339 1384e3f36c64c46294e14eec7998ce219e23271c5f7558a6c9ba40d018e02339
|
||||
lib/codeql/swift/generated/Raw.qll fe51a0a1ba7ecae3338b3f776e5586a0f661083463cfc82c1884ef4971f7763c 65d637456c70a7b01b43301d7b9a19a4b35c53dbe6b792829bcb8d02b00a32e7
|
||||
lib/codeql/swift/generated/Synth.qll 76e5b9ba4df278843acb8b513ce5796c28b8fdc89234c879c2a124c2a768b2e4 0d5076c1c4dad9bb4e2d5e13e8e62ddef96756f8fc5c028d7cc634d84c1da80b
|
||||
lib/codeql/swift/generated/SynthConstructors.qll 1e03d6bb048432db4cd701cac70389307d64faf81eab6fa996c2107cac78075a 1e03d6bb048432db4cd701cac70389307d64faf81eab6fa996c2107cac78075a
|
||||
lib/codeql/swift/generated/UnknownFile.qll 5922b351b55d5becac0c1ad67b8d601bcc9499dce9ee4093b607101e7e299104 5922b351b55d5becac0c1ad67b8d601bcc9499dce9ee4093b607101e7e299104
|
||||
lib/codeql/swift/generated/UnknownLocation.qll 67b8605ff5aaa0f3a8588fee2527eba5ec4e322562159c9af3d53486b7954ee9 67b8605ff5aaa0f3a8588fee2527eba5ec4e322562159c9af3d53486b7954ee9
|
||||
lib/codeql/swift/generated/UnspecifiedElement.qll 01182fee4d5c86b551e89c79d0d645f5e85c0aeeeae9dcafcbd7721c3eb3cc14 cb95ab2b13da080ada10e0a3bd1b00577541c4bfe699cbd19ef45f1e00e7c651
|
||||
@@ -474,6 +476,7 @@ lib/codeql/swift/generated/expr/CollectionExpr.qll 40f0167cbf67bba45be184e9603f9
|
||||
lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll 9925461069bd584492925baae30ab098d55ec552e557c6357e8bc82ea204d843 6462bd150d2b6dafbbb05c17e970c47e290cc1d1ae704e5ccb381800451a7188
|
||||
lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll 65bdf5e9a9e98569af93d2212b114c822e9809ad4a43b50e50e8face07268156 c20f1ff1fd6231e7691d50cc1ee0c36edd8ed3a58ce1cc378ce9e03e9423cb6e
|
||||
lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll be657b986ae9a8ba929d3e5683d101e1a26e8d7995376ed68610477e87f48184 be657b986ae9a8ba929d3e5683d101e1a26e8d7995376ed68610477e87f48184
|
||||
lib/codeql/swift/generated/expr/ConsumeExpr.qll 1b90630ffefdef29ef57ea1070b6e28580c6245f31e3c6209b5960f7c1409ab7 b0d484bdcd875121ceab93a2fc4af8d320997c1581250bbcd77a29e0cb1765f7
|
||||
lib/codeql/swift/generated/expr/CopyExpr.qll a25970a0238df0ebcf63d437681b1ba3d5f750f0ab69d7c1bb9f3b600392dc90 4c64344d994a0b1fd6fbf39283d3d87423d2dd13893509b296fdbd280703ad04
|
||||
lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll 4b48c9d01c5f67bd5a6d2ff609ac9bf87954298cd0719b5a951efb89146fcbe6 43626bf6760dfc8f49362d8f065a8f5339f822c8f76ff9be012b4471e20afde2
|
||||
lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll 0c8dffec9ed1f28902a9679ec29ba33b6a9225460180db923733ad3d14fbdd28 fee3ddce4a699c86770b2a9211e524f764ed9140860b7e6c58ca7f62566cd4ec
|
||||
@@ -797,6 +800,8 @@ test/extractor-tests/generated/expr/CallExpr/MISSING_SOURCE.txt 66846d526b0bc432
|
||||
test/extractor-tests/generated/expr/CaptureListExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
|
||||
test/extractor-tests/generated/expr/CoerceExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
|
||||
test/extractor-tests/generated/expr/ConditionalCheckedCastExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
|
||||
test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql 82c89019ed578c83dfa7c7bd04e52bb795facacfc2163c4757a5f43dbc8c7e0c 21a0f3b831daf6067977e3ad150cef085a72c775182e2e280e9bca22432640a6
|
||||
test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.ql 18017c131ec3425ec850963fde2239648b0fcb54abc498017bbb36d4f6c2f9f7 248bb50866bc75dad94d15a19aa30a00231abd996e613d4ba3a7d361707f75e6
|
||||
test/extractor-tests/generated/expr/CopyExpr/CopyExpr.ql 2e80272756531b3d7c65d9efd9474927e5cea719813acb599b61526e1957b220 1982362701e058bd32d3f9dfafbee3770a5016008cc1330237eb102f8459b506
|
||||
test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.ql 33698df9758f9399a0a7492a8432399582d2d52699572ca550c0fcdad839336e 330bd731f686d534769f7fc08d04e60dec83bced96cf39845c4374fa0629eb53
|
||||
test/extractor-tests/generated/expr/DeclRefExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
|
||||
|
||||
5
swift/ql/.gitattributes
generated
vendored
5
swift/ql/.gitattributes
generated
vendored
@@ -98,6 +98,8 @@
|
||||
/lib/codeql/swift/elements/expr/ConditionalBridgeFromObjCExprConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/expr/ConditionalCheckedCastExpr.qll linguist-generated
|
||||
/lib/codeql/swift/elements/expr/ConditionalCheckedCastExprConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/expr/ConsumeExpr.qll linguist-generated
|
||||
/lib/codeql/swift/elements/expr/ConsumeExprConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/expr/CopyExpr.qll linguist-generated
|
||||
/lib/codeql/swift/elements/expr/CopyExprConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/expr/CovariantFunctionConversionExpr.qll linguist-generated
|
||||
@@ -476,6 +478,7 @@
|
||||
/lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll linguist-generated
|
||||
/lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll linguist-generated
|
||||
/lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll linguist-generated
|
||||
/lib/codeql/swift/generated/expr/ConsumeExpr.qll linguist-generated
|
||||
/lib/codeql/swift/generated/expr/CopyExpr.qll linguist-generated
|
||||
/lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll linguist-generated
|
||||
/lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll linguist-generated
|
||||
@@ -799,6 +802,8 @@
|
||||
/test/extractor-tests/generated/expr/CaptureListExpr/MISSING_SOURCE.txt linguist-generated
|
||||
/test/extractor-tests/generated/expr/CoerceExpr/MISSING_SOURCE.txt linguist-generated
|
||||
/test/extractor-tests/generated/expr/ConditionalCheckedCastExpr/MISSING_SOURCE.txt linguist-generated
|
||||
/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql linguist-generated
|
||||
/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.ql linguist-generated
|
||||
/test/extractor-tests/generated/expr/CopyExpr/CopyExpr.ql linguist-generated
|
||||
/test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.ql linguist-generated
|
||||
/test/extractor-tests/generated/expr/DeclRefExpr/MISSING_SOURCE.txt linguist-generated
|
||||
|
||||
1
swift/ql/lib/codeql/swift/elements.qll
generated
1
swift/ql/lib/codeql/swift/elements.qll
generated
@@ -91,6 +91,7 @@ import codeql.swift.elements.expr.CollectionExpr
|
||||
import codeql.swift.elements.expr.CollectionUpcastConversionExpr
|
||||
import codeql.swift.elements.expr.ConditionalBridgeFromObjCExpr
|
||||
import codeql.swift.elements.expr.ConditionalCheckedCastExpr
|
||||
import codeql.swift.elements.expr.ConsumeExpr
|
||||
import codeql.swift.elements.expr.CopyExpr
|
||||
import codeql.swift.elements.expr.CovariantFunctionConversionExpr
|
||||
import codeql.swift.elements.expr.CovariantReturnConversionExpr
|
||||
|
||||
8
swift/ql/lib/codeql/swift/elements/expr/ConsumeExpr.qll
generated
Normal file
8
swift/ql/lib/codeql/swift/elements/expr/ConsumeExpr.qll
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `ConsumeExpr`.
|
||||
*/
|
||||
|
||||
private import codeql.swift.generated.expr.ConsumeExpr
|
||||
|
||||
class ConsumeExpr extends Generated::ConsumeExpr { }
|
||||
14
swift/ql/lib/codeql/swift/elements/expr/ConsumeExprConstructor.qll
generated
Normal file
14
swift/ql/lib/codeql/swift/elements/expr/ConsumeExprConstructor.qll
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module defines the hook used internally to tweak the characteristic predicate of
|
||||
* `ConsumeExpr` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import codeql.swift.generated.Raw
|
||||
|
||||
/**
|
||||
* The characteristic predicate of `ConsumeExpr` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
predicate constructConsumeExpr(Raw::ConsumeExpr id) { any() }
|
||||
20
swift/ql/lib/codeql/swift/generated/ParentChild.qll
generated
20
swift/ql/lib/codeql/swift/generated/ParentChild.qll
generated
@@ -1201,6 +1201,24 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfConsumeExpr(
|
||||
ConsumeExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bExpr, int n, int nSubExpr |
|
||||
b = 0 and
|
||||
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
|
||||
n = bExpr and
|
||||
nSubExpr = n + 1 and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
|
||||
or
|
||||
index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfCopyExpr(CopyExpr e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bExpr, int n, int nSubExpr |
|
||||
b = 0 and
|
||||
@@ -5094,6 +5112,8 @@ private module Impl {
|
||||
or
|
||||
result = getImmediateChildOfCaptureListExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfConsumeExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfCopyExpr(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfDeclRefExpr(e, index, partialAccessor)
|
||||
|
||||
18
swift/ql/lib/codeql/swift/generated/Raw.qll
generated
18
swift/ql/lib/codeql/swift/generated/Raw.qll
generated
@@ -1119,6 +1119,24 @@ module Raw {
|
||||
*/
|
||||
class CollectionExpr extends @collection_expr, Expr { }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* An expression that forces value to be moved. In the example below, `consume` marks the move expression:
|
||||
*
|
||||
* ```
|
||||
* let y = ...
|
||||
* let x = consume y
|
||||
* ```
|
||||
*/
|
||||
class ConsumeExpr extends @consume_expr, Expr {
|
||||
override string toString() { result = "ConsumeExpr" }
|
||||
|
||||
/**
|
||||
* Gets the sub expression of this consume expression.
|
||||
*/
|
||||
Expr getSubExpr() { consume_exprs(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* An expression that forces value to be copied. In the example below, `copy` marks the copy expression:
|
||||
|
||||
48
swift/ql/lib/codeql/swift/generated/Synth.qll
generated
48
swift/ql/lib/codeql/swift/generated/Synth.qll
generated
@@ -279,6 +279,10 @@ module Synth {
|
||||
TConditionalCheckedCastExpr(Raw::ConditionalCheckedCastExpr id) {
|
||||
constructConditionalCheckedCastExpr(id)
|
||||
} or
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
TConsumeExpr(Raw::ConsumeExpr id) { constructConsumeExpr(id) } or
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
@@ -1199,19 +1203,19 @@ module Synth {
|
||||
*/
|
||||
class TExpr =
|
||||
TAnyTryExpr or TAppliedPropertyWrapperExpr or TApplyExpr or TAssignExpr or TBindOptionalExpr or
|
||||
TCaptureListExpr or TClosureExpr or TCollectionExpr or TCopyExpr or TDeclRefExpr or
|
||||
TDefaultArgumentExpr or TDiscardAssignmentExpr or TDotSyntaxBaseIgnoredExpr or
|
||||
TDynamicTypeExpr or TEnumIsCaseExpr or TErrorExpr or TExplicitCastExpr or TForceValueExpr or
|
||||
TIdentityExpr or TIfExpr or TImplicitConversionExpr or TInOutExpr or
|
||||
TKeyPathApplicationExpr or TKeyPathDotExpr or TKeyPathExpr or TLazyInitializationExpr or
|
||||
TLiteralExpr or TLookupExpr or TMakeTemporarilyEscapableExpr or TObjCSelectorExpr or
|
||||
TOneWayExpr or TOpaqueValueExpr or TOpenExistentialExpr or TOptionalEvaluationExpr or
|
||||
TOtherInitializerRefExpr or TOverloadedDeclRefExpr or TPackElementExpr or
|
||||
TPackExpansionExpr or TPropertyWrapperValuePlaceholderExpr or
|
||||
TRebindSelfInInitializerExpr or TSequenceExpr or TSingleValueStmtExpr or TSuperRefExpr or
|
||||
TTapExpr or TTupleElementExpr or TTupleExpr or TTypeExpr or TUnresolvedDeclRefExpr or
|
||||
TUnresolvedDotExpr or TUnresolvedMemberExpr or TUnresolvedPatternExpr or
|
||||
TUnresolvedSpecializeExpr or TVarargExpansionExpr;
|
||||
TCaptureListExpr or TClosureExpr or TCollectionExpr or TConsumeExpr or TCopyExpr or
|
||||
TDeclRefExpr or TDefaultArgumentExpr or TDiscardAssignmentExpr or
|
||||
TDotSyntaxBaseIgnoredExpr or TDynamicTypeExpr or TEnumIsCaseExpr or TErrorExpr or
|
||||
TExplicitCastExpr or TForceValueExpr or TIdentityExpr or TIfExpr or
|
||||
TImplicitConversionExpr or TInOutExpr or TKeyPathApplicationExpr or TKeyPathDotExpr or
|
||||
TKeyPathExpr or TLazyInitializationExpr or TLiteralExpr or TLookupExpr or
|
||||
TMakeTemporarilyEscapableExpr or TObjCSelectorExpr or TOneWayExpr or TOpaqueValueExpr or
|
||||
TOpenExistentialExpr or TOptionalEvaluationExpr or TOtherInitializerRefExpr or
|
||||
TOverloadedDeclRefExpr or TPackElementExpr or TPackExpansionExpr or
|
||||
TPropertyWrapperValuePlaceholderExpr or TRebindSelfInInitializerExpr or TSequenceExpr or
|
||||
TSingleValueStmtExpr or TSuperRefExpr or TTapExpr or TTupleElementExpr or TTupleExpr or
|
||||
TTypeExpr or TUnresolvedDeclRefExpr or TUnresolvedDotExpr or TUnresolvedMemberExpr or
|
||||
TUnresolvedPatternExpr or TUnresolvedSpecializeExpr or TVarargExpansionExpr;
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
@@ -1864,6 +1868,13 @@ module Synth {
|
||||
result = TConditionalCheckedCastExpr(e)
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a raw element to a synthesized `TConsumeExpr`, if possible.
|
||||
*/
|
||||
cached
|
||||
TConsumeExpr convertConsumeExprFromRaw(Raw::Element e) { result = TConsumeExpr(e) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a raw element to a synthesized `TCopyExpr`, if possible.
|
||||
@@ -3713,6 +3724,8 @@ module Synth {
|
||||
or
|
||||
result = convertCollectionExprFromRaw(e)
|
||||
or
|
||||
result = convertConsumeExprFromRaw(e)
|
||||
or
|
||||
result = convertCopyExprFromRaw(e)
|
||||
or
|
||||
result = convertDeclRefExprFromRaw(e)
|
||||
@@ -4771,6 +4784,13 @@ module Synth {
|
||||
e = TConditionalCheckedCastExpr(result)
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a synthesized `TConsumeExpr` to a raw DB element, if possible.
|
||||
*/
|
||||
cached
|
||||
Raw::Element convertConsumeExprToRaw(TConsumeExpr e) { e = TConsumeExpr(result) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a synthesized `TCopyExpr` to a raw DB element, if possible.
|
||||
@@ -6618,6 +6638,8 @@ module Synth {
|
||||
or
|
||||
result = convertCollectionExprToRaw(e)
|
||||
or
|
||||
result = convertConsumeExprToRaw(e)
|
||||
or
|
||||
result = convertCopyExprToRaw(e)
|
||||
or
|
||||
result = convertDeclRefExprToRaw(e)
|
||||
|
||||
@@ -64,6 +64,7 @@ import codeql.swift.elements.expr.CoerceExprConstructor
|
||||
import codeql.swift.elements.expr.CollectionUpcastConversionExprConstructor
|
||||
import codeql.swift.elements.expr.ConditionalBridgeFromObjCExprConstructor
|
||||
import codeql.swift.elements.expr.ConditionalCheckedCastExprConstructor
|
||||
import codeql.swift.elements.expr.ConsumeExprConstructor
|
||||
import codeql.swift.elements.expr.CopyExprConstructor
|
||||
import codeql.swift.elements.expr.CovariantFunctionConversionExprConstructor
|
||||
import codeql.swift.elements.expr.CovariantReturnConversionExprConstructor
|
||||
|
||||
48
swift/ql/lib/codeql/swift/generated/expr/ConsumeExpr.qll
generated
Normal file
48
swift/ql/lib/codeql/swift/generated/expr/ConsumeExpr.qll
generated
Normal file
@@ -0,0 +1,48 @@
|
||||
// generated by codegen/codegen.py
|
||||
/**
|
||||
* This module provides the generated definition of `ConsumeExpr`.
|
||||
* INTERNAL: Do not import directly.
|
||||
*/
|
||||
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.expr.Expr
|
||||
|
||||
module Generated {
|
||||
/**
|
||||
* An expression that forces value to be moved. In the example below, `consume` marks the move expression:
|
||||
*
|
||||
* ```
|
||||
* let y = ...
|
||||
* let x = consume y
|
||||
* ```
|
||||
* INTERNAL: Do not reference the `Generated::ConsumeExpr` class directly.
|
||||
* Use the subclass `ConsumeExpr`, where the following predicates are available.
|
||||
*/
|
||||
class ConsumeExpr extends Synth::TConsumeExpr, Expr {
|
||||
override string getAPrimaryQlClass() { result = "ConsumeExpr" }
|
||||
|
||||
/**
|
||||
* Gets the sub expression of this consume expression.
|
||||
*
|
||||
* This includes nodes from the "hidden" AST. It can be overridden in subclasses to change the
|
||||
* behavior of both the `Immediate` and non-`Immediate` versions.
|
||||
*/
|
||||
Expr getImmediateSubExpr() {
|
||||
result =
|
||||
Synth::convertExprFromRaw(Synth::convertConsumeExprToRaw(this)
|
||||
.(Raw::ConsumeExpr)
|
||||
.getSubExpr())
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the sub expression of this consume expression.
|
||||
*/
|
||||
final Expr getSubExpr() {
|
||||
exists(Expr immediate |
|
||||
immediate = this.getImmediateSubExpr() and
|
||||
if exists(this.getResolveStep()) then result = immediate else result = immediate.resolve()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
6
swift/ql/lib/swift.dbscheme
generated
6
swift/ql/lib/swift.dbscheme
generated
@@ -734,6 +734,7 @@ arguments( //dir=expr
|
||||
| @capture_list_expr
|
||||
| @closure_expr
|
||||
| @collection_expr
|
||||
| @consume_expr
|
||||
| @copy_expr
|
||||
| @decl_ref_expr
|
||||
| @default_argument_expr
|
||||
@@ -860,6 +861,11 @@ capture_list_expr_binding_decls( //dir=expr
|
||||
| @dictionary_expr
|
||||
;
|
||||
|
||||
consume_exprs( //dir=expr
|
||||
unique int id: @consume_expr,
|
||||
int sub_expr: @expr_or_none ref
|
||||
);
|
||||
|
||||
copy_exprs( //dir=expr
|
||||
unique int id: @copy_expr,
|
||||
int sub_expr: @expr_or_none ref
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
ERROR: This predicate overrides another predicate but is not marked as 'override' (/opt/GitHub/semmle-code/ql/swift/ql/lib/codeql/swift/generated/expr/BorrowExpr.qll:26,5-35,6)
|
||||
ERROR: This predicate overrides another predicate but is not marked as 'override' (/opt/GitHub/semmle-code/ql/swift/ql/lib/codeql/swift/generated/Raw.qll:1894,5-1897,53)
|
||||
| move_semantics.swift:5:9:5:17 | ConsumeExpr | hasType: | yes | getSubExpr: | move_semantics.swift:5:17:5:17 | x |
|
||||
|
||||
11
swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql
generated
Normal file
11
swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql
generated
Normal file
@@ -0,0 +1,11 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from ConsumeExpr x, string hasType, Expr getSubExpr
|
||||
where
|
||||
toBeTested(x) and
|
||||
not x.isUnknown() and
|
||||
(if x.hasType() then hasType = "yes" else hasType = "no") and
|
||||
getSubExpr = x.getSubExpr()
|
||||
select x, "hasType:", hasType, "getSubExpr:", getSubExpr
|
||||
@@ -1,2 +1 @@
|
||||
ERROR: This predicate overrides another predicate but is not marked as 'override' (/opt/GitHub/semmle-code/ql/swift/ql/lib/codeql/swift/generated/expr/BorrowExpr.qll:26,5-35,6)
|
||||
ERROR: This predicate overrides another predicate but is not marked as 'override' (/opt/GitHub/semmle-code/ql/swift/ql/lib/codeql/swift/generated/Raw.qll:1894,5-1897,53)
|
||||
| move_semantics.swift:5:9:5:17 | ConsumeExpr | Int |
|
||||
|
||||
7
swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.ql
generated
Normal file
7
swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.ql
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from ConsumeExpr x
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, x.getType()
|
||||
@@ -2,3 +2,4 @@
|
||||
|
||||
let x = 42
|
||||
let _ = copy x
|
||||
let _ = consume x
|
||||
|
||||
@@ -1338,3 +1338,15 @@ class CopyExpr(Expr):
|
||||
```
|
||||
"""
|
||||
sub_expr: Expr | child
|
||||
|
||||
@qltest.test_with(CopyExpr)
|
||||
class ConsumeExpr(Expr):
|
||||
"""
|
||||
An expression that forces value to be moved. In the example below, `consume` marks the move expression:
|
||||
|
||||
```
|
||||
let y = ...
|
||||
let x = consume y
|
||||
```
|
||||
"""
|
||||
sub_expr: Expr | child
|
||||
|
||||
Reference in New Issue
Block a user