Skip to content

Commit e07958d

Browse files
authored
Merge pull request #619 from owen-mc/update-is-variadic
Update `isVariadic`
2 parents adbe198 + e08007b commit e07958d

7 files changed

Lines changed: 20 additions & 12 deletions

File tree

ql/lib/semmle/go/Decls.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ class FuncDef extends @funcdef, StmtParent, ExprParent {
137137
*/
138138
DataFlow::CallNode getACall() { result.getACallee() = this }
139139

140+
/** Holds if this function is variadic. */
140141
predicate isVariadic() { this.getType().isVariadic() }
141142

142143
override string getAPrimaryQlClass() { result = "FuncDef" }

ql/lib/semmle/go/Scopes.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,10 +377,11 @@ class Function extends ValueEntity, @functionobject {
377377
/** Gets the declaration of this function, if any. */
378378
FuncDecl getFuncDecl() { none() }
379379

380+
/** Holds if this function is variadic. */
380381
predicate isVariadic() {
381382
this.(BuiltinFunction).getName() = ["append", "make", "print", "println"]
382383
or
383-
this.(DeclaredFunction).getFuncDecl().isVariadic()
384+
this.(DeclaredFunction).getType().(SignatureType).isVariadic()
384385
}
385386

386387
/** Holds if this function has no observable side effects. */

ql/test/library-tests/semmle/go/Function/getParameter.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
| main.go:13:6:13:7 | f4 | 1 | main.go:13:16:13:16 | y |
1010
| main.go:15:6:15:7 | f5 | 0 | main.go:15:9:15:9 | x |
1111
| main.go:17:6:17:7 | f6 | 0 | main.go:17:9:17:9 | x |
12-
| variadicFunctions.go:7:6:7:29 | variadicDeclaredFunction | 0 | variadicFunctions.go:7:31:7:31 | x |
12+
| variadicFunctions.go:9:6:9:29 | variadicDeclaredFunction | 0 | variadicFunctions.go:9:31:9:31 | x |
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package main
22

3+
import "fmt"
4+
35
func testing() {
46
variadicDeclaredFunction() // $ isVariadic
57
}
68

79
func variadicDeclaredFunction(x ...int) int {
8-
a := make([]int, 0, 10) // $ isVariadic
9-
y := append(x, a...) // $ isVariadic
10-
print(x[0], x[1]) // $ isVariadic
11-
println(x[0], x[1]) // $ isVariadic
10+
a := make([]int, 0, 10) // $ isVariadic
11+
y := append(x, a...) // $ isVariadic
12+
print(x[0], x[1]) // $ isVariadic
13+
println(x[0], x[1]) // $ isVariadic
14+
fmt.Fprint(nil, nil, nil) // $ isVariadic
1215
variadicFunctionLiteral := func(z ...int) int { return z[1] }
1316
return variadicFunctionLiteral(y...)
1417
}

ql/test/library-tests/semmle/go/Types/SignatureType_getNumParameter.expected

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
| pkg1/tst.go:37:1:37:26 | function declaration | 1 |
1111
| pkg1/tst.go:39:1:57:1 | function declaration | 2 |
1212
| unknownFunction.go:8:1:12:1 | function declaration | 0 |
13-
| variadicFunctions.go:3:1:5:1 | function declaration | 0 |
14-
| variadicFunctions.go:7:1:14:1 | function declaration | 1 |
15-
| variadicFunctions.go:12:29:12:62 | function literal | 1 |
13+
| variadicFunctions.go:5:1:7:1 | function declaration | 0 |
14+
| variadicFunctions.go:9:1:17:1 | function declaration | 1 |
15+
| variadicFunctions.go:15:29:15:62 | function literal | 1 |

ql/test/library-tests/semmle/go/Types/SignatureType_getNumResult.expected

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
| pkg1/tst.go:37:1:37:26 | function declaration | 0 |
1111
| pkg1/tst.go:39:1:57:1 | function declaration | 0 |
1212
| unknownFunction.go:8:1:12:1 | function declaration | 0 |
13-
| variadicFunctions.go:3:1:5:1 | function declaration | 0 |
14-
| variadicFunctions.go:7:1:14:1 | function declaration | 1 |
15-
| variadicFunctions.go:12:29:12:62 | function literal | 1 |
13+
| variadicFunctions.go:5:1:7:1 | function declaration | 0 |
14+
| variadicFunctions.go:9:1:17:1 | function declaration | 1 |
15+
| variadicFunctions.go:15:29:15:62 | function literal | 1 |

ql/test/library-tests/semmle/go/Types/variadicFunctions.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package main
22

3+
import "fmt"
4+
35
func testing() {
46
variadicDeclaredFunction()
57
}
@@ -9,6 +11,7 @@ func variadicDeclaredFunction(x ...int) int { // $ isVariadic
911
y := append(x, a...)
1012
print(x[0], x[1])
1113
println(x[0], x[1])
14+
fmt.Fprint(nil, nil, nil)
1215
variadicFunctionLiteral := func(z ...int) int { return z[1] } // $ isVariadic
1316
return variadicFunctionLiteral(y...)
1417
}

0 commit comments

Comments
 (0)