Skip to content

Commit 0882eb7

Browse files
committed
Merge rc/1.18 into master.
2 parents 9ffdf3b + 828d3cb commit 0882eb7

File tree

12 files changed

+49
-33
lines changed

12 files changed

+49
-33
lines changed

cpp/ql/src/Documentation/CommentedOutCode.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class CommentBlock extends Comment {
119119
*/
120120
predicate hasLocationInfo(string filepath, int startline, int startcolumn, int endline, int endcolumn) {
121121
this.getLocation().hasLocationInfo(filepath, startline, startcolumn, _, _) and
122-
this.lastComment().getLocation().hasLocationInfo(filepath, _, _, endline, endcolumn)
122+
this.lastComment().getLocation().hasLocationInfo(_, _, _, endline, endcolumn)
123123
}
124124
}
125125

cpp/ql/src/META-INF/MANIFEST.MF

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: Semmle C/C++ Default Queries
44
Bundle-SymbolicName: com.semmle.plugin.semmlecode.cpp.queries;singleton:=true
5-
Bundle-Version: 1.18.0.qualifier
5+
Bundle-Version: 1.18.1.qualifier
66
Bundle-Vendor: Semmle Ltd.
77
Bundle-ActivationPolicy: lazy
8-
Require-Bundle: com.semmle.plugin.qdt.ui;bundle-version="[1.18.0.qualifier,1.18.0.qualifier]"
8+
Require-Bundle: com.semmle.plugin.qdt.ui;bundle-version="[1.18.1.qualifier,1.18.1.qualifier]"

cpp/ql/src/semmle/code/cpp/Element.qll

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,38 @@ import semmle.code.cpp.Location
22
private import semmle.code.cpp.Enclosing
33
private import semmle.code.cpp.internal.ResolveClass
44

5-
/**
6-
* Get the `@element` that represents this `@element`.
7-
* Normally this will simply be `e`, but sometimes it is not.
8-
* For example, for an incomplete struct `e` the result may be a
9-
* complete struct with the same name.
10-
*/
11-
private cached @element resolveElement(@element e) {
12-
if isClass(e)
13-
then result = resolveClass(e)
14-
else result = e
15-
}
16-
175
/**
186
* Get the `Element` that represents this `@element`.
197
* Normally this will simply be a cast of `e`, but sometimes it is not.
208
* For example, for an incomplete struct `e` the result may be a
219
* complete struct with the same name.
2210
*/
11+
pragma[inline]
2312
Element mkElement(@element e) {
24-
result = resolveElement(e)
13+
unresolveElement(result) = e
2514
}
2615

2716
/**
28-
* Get an `@element` that resolves to the `Element`. This should
17+
* INTERNAL: Do not use.
18+
*
19+
* Gets an `@element` that resolves to the `Element`. This should
2920
* normally only be called from member predicates, where `e` is not
3021
* `this` and you need the result for an argument to a database
3122
* extensional.
3223
* See `underlyingElement` for when `e` is `this`.
3324
*/
25+
pragma[inline]
3426
@element unresolveElement(Element e) {
35-
resolveElement(result) = e
27+
not result instanceof @usertype and
28+
result = e
29+
or
30+
e = resolveClass(result)
3631
}
3732

3833
/**
39-
* Get the `@element` that this `Element` extends. This should normally
34+
* INTERNAL: Do not use.
35+
*
36+
* Gets the `@element` that this `Element` extends. This should normally
4037
* only be called from member predicates, where `e` is `this` and you
4138
* need the result for an argument to a database extensional.
4239
* See `unresolveElement` for when `e` is not `this`.
@@ -53,10 +50,6 @@ Element mkElement(@element e) {
5350
* `getLocation`, or `hasLocationInfo`.
5451
*/
5552
class ElementBase extends @element {
56-
ElementBase() {
57-
this = resolveElement(_)
58-
}
59-
6053
/** Gets a textual representation of this element. */
6154
string toString() { none() }
6255
}

cpp/ql/src/semmle/code/cpp/Specifier.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,13 +294,13 @@ class AttributeArgument extends Element, @attribute_arg {
294294
}
295295

296296
override string toString() {
297-
if exists (@attribute_arg_empty self | mkElement(self) = this)
297+
if exists (@attribute_arg_empty self | self = underlyingElement(this))
298298
then result = "empty argument"
299299
else exists (string prefix, string tail
300300
| (if exists(getName())
301301
then prefix = getName() + "="
302302
else prefix = "") and
303-
(if exists (@attribute_arg_type self | mkElement(self) = this)
303+
(if exists (@attribute_arg_type self | self = underlyingElement(this))
304304
then tail = getValueType().getName()
305305
else tail = getValueText()) and
306306
result = prefix + tail)

cpp/ql/src/semmle/code/cpp/Type.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ private import semmle.code.cpp.internal.ResolveClass
77
* A C/C++ type.
88
*/
99
class Type extends Locatable, @type {
10+
Type() { isType(underlyingElement(this)) }
11+
1012
/**
1113
* Gets the name of this type.
1214
*/

cpp/ql/src/semmle/code/cpp/internal/ResolveClass.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,10 @@ cached private module Cached {
5454
(usertypes(t,_,1) or usertypes(t,_,2) or usertypes(t,_,3) or usertypes(t,_,6)
5555
or usertypes(t,_,10) or usertypes(t,_,11) or usertypes(t,_,12))
5656
}
57+
58+
cached predicate isType(@type t) {
59+
not isClass(t)
60+
or
61+
t = resolveClass(_)
62+
}
5763
}

cpp/ql/src/semmle/code/cpp/pointsto/PointsTo.qll

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -633,12 +633,26 @@ class PointsToExpr extends Expr
633633
pragma[noopt]
634634
Element pointsTo()
635635
{
636-
this.interesting() and exists(int set, @element thisEntity, @element resultEntity | thisEntity = underlyingElement(this) and pointstosets(set, thisEntity) and setlocations(set, resultEntity) and resultEntity = unresolveElement(result))
636+
this.interesting() and
637+
exists(int set, @element thisEntity, @element resultEntity |
638+
thisEntity = underlyingElement(this) and
639+
pointstosets(set, thisEntity) and
640+
setlocations(set, resultEntity) and
641+
resultEntity = localUnresolveElement(result)
642+
)
637643
}
638644

639645
float confidence() { result = 1.0 / count(this.pointsTo()) }
640646
}
641647

648+
/*
649+
* This is used above in a `pragma[noopt]` context, which prevents its
650+
* customary inlining. We materialise it explicitly here.
651+
*/
652+
private @element localUnresolveElement(Element e) {
653+
result = unresolveElement(e)
654+
}
655+
642656
/**
643657
* Holds if anything points to an element, that is, is equivalent to:
644658
* ```

cpp/ql/src/semmle/code/cpp/security/Overflow.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ predicate guardedAbs(Operation e, Expr use) {
1313
}
1414

1515
/** is the size of this use guarded to be less than something? */
16+
pragma[nomagic]
1617
predicate guardedLesser(Operation e, Expr use) {
1718
exists(IfStmt c, RelationalOperation guard |
1819
use = guard.getLesserOperand().getAChild*() and
@@ -33,6 +34,7 @@ predicate guardedLesser(Operation e, Expr use) {
3334
}
3435

3536
/** is the size of this use guarded to be greater than something? */
37+
pragma[nomagic]
3638
predicate guardedGreater(Operation e, Expr use) {
3739
exists(IfStmt c, RelationalOperation guard |
3840
use = guard.getGreaterOperand().getAChild*() and

cpp/ql/test/library-tests/templates/CPP-204/element.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
| test.cpp:8:31:8:35 | initializer for Value |
3535
| test.cpp:11:10:11:11 | mention of EC |
3636
| test.cpp:11:25:11:27 | mention of IsX<X> |
37-
| test.cpp:11:25:11:27 | mention of IsX<X> |
3837
| test.cpp:12:8:12:9 | DX<X, B> |
3938
| test.cpp:12:8:12:9 | definition of DX<X, B> |
4039
| test.cpp:13:17:13:20 | Type |

csharp/ql/src/META-INF/MANIFEST.MF

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: Semmle C# Default Queries
44
Bundle-SymbolicName: com.semmle.plugin.semmlecode.csharp.queries;singleton:=true
5-
Bundle-Version: 1.18.0.qualifier
5+
Bundle-Version: 1.18.1.qualifier
66
Bundle-Vendor: Semmle Ltd.
77
Bundle-ActivationPolicy: lazy
8-
Require-Bundle: com.semmle.plugin.qdt.ui;bundle-version="[1.18.0.qualifier, 1.18.0.qualifier]"
8+
Require-Bundle: com.semmle.plugin.qdt.ui;bundle-version="[1.18.1.qualifier,1.18.1.qualifier]"

0 commit comments

Comments
 (0)