Dave Bartolomeo
1e863ac40b
C++: Share TInstruction across IR stages
...
Each stage of the IR reuses the majority of the instructions from previous stages. Previously, we've been wrapping each reused old instruction in a branch of the `TInstruction` type for the next stage. This causes use to create roughly three times as many `TInstruction` objects as we actually need.
Now that IPA union types are supported in the compiler, we can share a single `TInstruction` IPA type across stages. We create a single `TInstruction` IPA type, with individual branches of this type for instructions created directly from the AST (`TRawInstruction`) and for instructions added by each stage of SSA construction (`T*PhiInstruction`, `T*ChiInstruction`, `T*UnreachedInstruction`). Each stage then defines a `TStageInstruction` type that is a union of all of the branches that can appear in that particular stage. The public `Instruction` class for each phase extends the `TStageInstruction` type for that stage.
The interface that each stage exposes to the pyrameterized modules in the IR is now split into three pieces:
- The `Raw` module, exposed only by the original IR construction stage. This module identifies which functions have IR, which `TRawInstruction`s exist, and which `IRVariable`s exist.
- The `SSA` module, exposed only by the two SSA construction stages. This identifiers which `Phi`, `Chi`, and `Unreached` instructions exist.
- The global module, exposed by all three stages. This module has all of the predicates whose implementation is different for each stage, like gathering definitions of `MemoryOperand`s.
Similarly, there is now a single `TIRFunction` IPA type that is shared across all three stages. There is a single `IRFunctionBase` class that exposes the stage-indepdendent predicates; the `IRFunction` class for each stage extends `IRFunctionBase`.
Most of the other changes are largely mechanical.
2020-06-01 11:15:29 -04:00
semmle-qlci
7265e94028
Merge pull request #3578 from erik-krogh/HtmlGuard
...
Approved by asgerf
2020-06-01 13:25:02 +01:00
Asger F
712c53afe9
Merge pull request #3579 from erik-krogh/fix-change-note-merge
...
JS: remove duplicates from change-note
2020-06-01 13:22:23 +01:00
semmle-qlci
14be4fedf7
Merge pull request #3594 from erik-krogh/CachedExprStringValue
...
Approved by asgerf
2020-05-30 16:56:40 +01:00
Erik Krogh Kristensen
dfd35aee61
autoformat
2020-05-30 14:50:13 +02:00
Mathias Vorreiter Pedersen
cd574e8569
Merge pull request #3589 from rdmarsh2/ir-placement-new-consistency
...
C++: fix IR control flow for cast in placement new
2020-05-30 13:27:34 +02:00
Erik Krogh Kristensen
3b4e57ab8d
autoformat
2020-05-30 12:45:51 +02:00
Robert Marsh
e17adf14dc
C++: autoformat
2020-05-29 16:13:40 -07:00
Jonas Jensen
91da0d5567
Merge pull request #3592 from geoffw0/strlen
...
CPP: Don't taint the return value of strlen
2020-05-29 19:23:47 +02:00
Robert Marsh
6c9051ae6f
C++: accept consistency fixes
2020-05-29 09:49:28 -07:00
Geoffrey White
9ee75aaca1
C++: Change note.
2020-05-29 16:22:42 +01:00
Geoffrey White
f534f09784
C++: Autoformat.
2020-05-29 14:05:08 +01:00
Geoffrey White
19c33ab41c
C++: Refine StrLenFunction, including removal of taint flow.
2020-05-29 14:04:27 +01:00
Geoffrey White
705529cdf7
C++: Split StrLenFunction from PureStrFunction (without changes).
2020-05-29 14:04:27 +01:00
Geoffrey White
59cb5f9b1e
C++: Remove a special case for strlen in DefaultTaintTracking.
2020-05-29 14:04:26 +01:00
Geoffrey White
408e38a4d4
C++: Clarify which taint tracking libraries should be used somewhat.
2020-05-29 14:04:26 +01:00
Geoffrey White
d77092c931
C++: Add taint tests for strlen.
2020-05-29 13:39:40 +01:00
semmle-qlci
f291749243
Merge pull request #3585 from asger-semmle/js/use-newer-yarn
...
Approved by erik-krogh
2020-05-29 13:02:20 +01:00
Erik Krogh Kristensen
f7ad210331
use SSA instead of internal AccessPath API
2020-05-29 13:08:19 +02:00
Erik Krogh Kristensen
05bfba4f99
use getImmediatePredecessor instead of getALocalSource()
2020-05-29 13:01:09 +02:00
Jonas Jensen
453de6bf4e
Merge pull request #3583 from MathiasVP/qldoc-for-unix-constants
...
C++: QLDoc for Constants
2020-05-29 12:27:59 +02:00
Mathias Vorreiter Pedersen
ae4f6edc6a
Merge pull request #3204 from jbj/Expr-location-workaround
...
C++: Move Expr location workaround to Expr.qll
2020-05-29 11:58:50 +02:00
Asger Feldthaus
f3a08375b4
JS: Use newer yarn.lock format
2020-05-29 09:45:50 +01:00
Jonas Jensen
7d4d435f25
Merge remote-tracking branch 'upstream/master' into Expr-location-workaround
...
Conflicts:
cpp/ql/test/library-tests/dataflow/fields/dataflow-ir-consistency.expected
2020-05-29 10:04:12 +02:00
Mathias Vorreiter Pedersen
a305d39111
Merge pull request #3577 from dbartol/github/codeql-c-analysis-team/69
...
C++: Fix `MemoryLocation` with multiple `VirtualVariables`
2020-05-29 09:40:58 +02:00
Mathias Vorreiter Pedersen
0467995f4f
C++: Make explicit that O_CREAT and O_EXCL are Linux-specific
2020-05-29 09:36:08 +02:00
Jonas Jensen
9813258a3e
Merge remote-tracking branch 'upstream/master' into Expr-location-workaround
...
Conflicts and semantic conflicts in `library-tests/dataflow/fields` and
`library-tests/ir/ir`.
2020-05-29 08:44:37 +02:00
Jonas Jensen
87ad519541
Merge pull request #3569 from geoffw0/strftime
...
C++: Taint flow consistency change for strftime
2020-05-29 08:05:25 +02:00
yo-h
1fea545160
Merge pull request #3573 from aschackmull/java/private-interface-methods
...
Java: Fix for private interface methods.
2020-05-28 20:31:55 -04:00
yo-h
c2de08ca51
Merge pull request #3499 from aschackmull/java/instanceof-pattern-cfg
...
Java: Add CFG edges for Java 14 pattern-matching instanceof.
2020-05-28 20:24:39 -04:00
Robert Marsh
f82c97b84a
C++: fix IR control flow for cast in placement new
2020-05-28 16:53:21 -07:00
Robert Marsh
56d0762380
C++: add test for placement new with cast
2020-05-28 16:36:26 -07:00
Robert Marsh
732da9cc4c
Merge pull request #3586 from MathiasVP/qldoc-for-remaining-controlflow
...
C++: QLDoc for the remaining elements in the controlflow directory
2020-05-28 15:59:19 -07:00
Dave Bartolomeo
476f27e427
Merge from master
2020-05-28 17:27:08 -04:00
Dave Bartolomeo
01ef8795bf
C++: Updated fixed test expectation
2020-05-28 17:24:38 -04:00
Robert Marsh
0d8472bd9e
Merge pull request #3571 from rdmarsh2/ir-this-parameter
...
Treat `this` as a parameter in IR generation
2020-05-28 14:16:12 -07:00
Calum Grant
2b90b50587
Merge pull request #3528 from hvitved/csharp/cfg/cs6-initializers
...
C#: Fix CFG for C# 6 initializers
2020-05-28 21:40:52 +01:00
Calum Grant
499e349bff
Merge pull request #3529 from hvitved/csharp/cs6-nested-initializer-type
...
C#: Fix extracted type for nested object initializers
2020-05-28 21:25:57 +01:00
Jonas Jensen
8b8c00de75
Merge pull request #3584 from jbj/devcontainer
...
Codespaces: initial configuration
2020-05-28 19:06:02 +02:00
Robert Marsh
d8b5d3bce8
C++: accept test fixes
2020-05-28 08:45:01 -07:00
Robert Marsh
693789c2cc
Merge branch 'master' into ir-this-parameter
...
Bring in new tests so their output can be fixed
2020-05-28 08:32:10 -07:00
Mathias Vorreiter Pedersen
7b2c9c5aed
C++: Add quotes to improve readability.
2020-05-28 16:48:48 +02:00
Mathias Vorreiter Pedersen
5fb79cde9a
C++: Sync identical files
2020-05-28 16:45:52 +02:00
Mathias Vorreiter Pedersen
0671586aac
C++: QLDoc for the remaining elements in the controlflow directory
2020-05-28 16:35:46 +02:00
Geoffrey White
6fcfd0310f
C++: Autoformat.
2020-05-28 15:23:48 +01:00
Geoffrey White
c9e1ccf320
Merge branch 'master' into strftime
2020-05-28 15:22:16 +01:00
Jonas Jensen
19d4011b8a
Codespaces: initial configuration
...
This was adapted from https://github.com/github/vscode-codeql-starter .
2020-05-28 14:01:36 +02:00
Jonas Jensen
688f540843
Merge pull request #3582 from MathiasVP/qldoc-for-controlflow
...
C++: QLDoc for BasicBlock, ControlFlowGraph and Dataflow
2020-05-28 13:52:43 +02:00
Erik Krogh Kristensen
5bb308dc8f
sanitize variables used in an HTML escaping switch-case
2020-05-28 12:37:41 +02:00
Mathias Vorreiter Pedersen
1ef0643b60
C++: QLDoc for Constants
2020-05-28 12:24:23 +02:00