65
65
66
66
private import codeql.util.Location
67
67
68
- signature module Semantic {
68
+ signature module Semantic< LocationSig Location > {
69
69
class Expr {
70
70
string toString ( ) ;
71
71
72
72
BasicBlock getBasicBlock ( ) ;
73
+
74
+ Location getLocation ( ) ;
73
75
}
74
76
75
77
class ConstantIntegerExpr extends Expr {
@@ -294,7 +296,7 @@ signature module Semantic {
294
296
predicate conversionCannotOverflow ( Type fromType , Type toType ) ;
295
297
}
296
298
297
- signature module SignAnalysisSig< Semantic Sem> {
299
+ signature module SignAnalysisSig< LocationSig Location , Semantic< Location > Sem> {
298
300
/** Holds if `e` can be positive and cannot be negative. */
299
301
predicate semPositive ( Sem:: Expr e ) ;
300
302
@@ -320,7 +322,7 @@ signature module SignAnalysisSig<Semantic Sem> {
320
322
predicate semMayBeNegative ( Sem:: Expr e ) ;
321
323
}
322
324
323
- signature module ModulusAnalysisSig< Semantic Sem> {
325
+ signature module ModulusAnalysisSig< LocationSig Location , Semantic< Location > Sem> {
324
326
class ModBound ;
325
327
326
328
predicate exprModulus ( Sem:: Expr e , ModBound b , int val , int mod ) ;
@@ -346,7 +348,7 @@ signature module DeltaSig {
346
348
Delta fromFloat ( float f ) ;
347
349
}
348
350
349
- signature module LangSig< Semantic Sem, DeltaSig D> {
351
+ signature module LangSig< LocationSig Location , Semantic< Location > Sem, DeltaSig D> {
350
352
/**
351
353
* Holds if `e >= bound` (if `upper = false`) or `e <= bound` (if `upper = true`).
352
354
*/
@@ -372,7 +374,7 @@ signature module LangSig<Semantic Sem, DeltaSig D> {
372
374
default predicate includeRelativeBounds ( ) { any ( ) }
373
375
}
374
376
375
- signature module BoundSig< LocationSig Location, Semantic Sem, DeltaSig D> {
377
+ signature module BoundSig< LocationSig Location, Semantic< Location > Sem, DeltaSig D> {
376
378
/**
377
379
* A bound that the range analysis can infer for a variable. This includes
378
380
* constant bounds represented by the abstract value zero, SSA bounds for when
@@ -409,22 +411,23 @@ signature module BoundSig<LocationSig Location, Semantic Sem, DeltaSig D> {
409
411
}
410
412
}
411
413
412
- signature module OverflowSig< Semantic Sem, DeltaSig D> {
414
+ signature module OverflowSig< LocationSig Location , Semantic< Location > Sem, DeltaSig D> {
413
415
predicate semExprDoesNotOverflow ( boolean positively , Sem:: Expr expr ) ;
414
416
}
415
417
416
418
module RangeStage<
417
- LocationSig Location, Semantic Sem, DeltaSig D, BoundSig< Location , Sem , D > Bounds,
418
- OverflowSig< Sem , D > OverflowParam, LangSig< Sem , D > LangParam, SignAnalysisSig< Sem > SignAnalysis,
419
- ModulusAnalysisSig< Sem > ModulusAnalysisParam>
419
+ LocationSig Location, Semantic< Location > Sem, DeltaSig D, BoundSig< Location , Sem , D > Bounds,
420
+ OverflowSig< Location , Sem , D > OverflowParam, LangSig< Location , Sem , D > LangParam,
421
+ SignAnalysisSig< Location , Sem > SignAnalysis,
422
+ ModulusAnalysisSig< Location , Sem > ModulusAnalysisParam>
420
423
{
421
424
private import Bounds
422
425
private import LangParam
423
426
private import D
424
427
private import OverflowParam
425
428
private import SignAnalysis
426
429
private import ModulusAnalysisParam
427
- private import internal.RangeUtils:: MakeUtils< Sem , D >
430
+ private import internal.RangeUtils:: MakeUtils< Location , Sem , D >
428
431
429
432
/**
430
433
* An expression that does conversion, boxing, or unboxing
0 commit comments