Skip to content

Commit 238db71

Browse files
committed
Fix potential issue with overloads
1 parent 0d03cf4 commit 238db71

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

compiler-plugin/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ allprojects {
8383

8484
name = "AoC Utility Kotlin Compiler Plugin"
8585
description = "Adds some utilities to code, developed originally for Advent of Code solving"
86-
url = "https://github.com/advent-of-code/"
86+
url = "https://github.com/sschr15/advent-of-code/"
8787

8888
developers {
8989
developer {

compiler-plugin/runtime-components/src/main/kotlin/SkipOverflowUnderflowCheck.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package sschr15.aoc.annotations
1+
package com.sschr15.aoc.annotations
22

33
/**
44
* Marks an expression to skip overflow and underflow checks.

compiler-plugin/src/main/kotlin/OverflowUnderflowChecker.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ class OverflowUnderflowChecker(private val context: IrPluginContext, private val
3737
"rem",
3838
)
3939

40+
val singleArgumentTypeChecks = setOf(
41+
"inc", "dec", "unaryMinus", "abs",
42+
)
43+
4044
val intConversions = setOf("toFloat")
4145
val longConversions = setOf("toInt", "toDouble", "toFloat")
4246
val absoluteValueName = Name.special("<get-absoluteValue>")
@@ -112,8 +116,11 @@ class OverflowUnderflowChecker(private val context: IrPluginContext, private val
112116
val primitiveType = expression.type.getPrimitiveType() ?: return super.visitCall(expression)
113117
if (primitiveType != PrimitiveType.INT && primitiveType != PrimitiveType.LONG) return super.visitCall(expression)
114118
if (expression.symbol.owner.name.asString() !in singleTypeChecks) return super.visitCall(expression)
115-
if (expression.valueArgumentsCount == 2 && expression.getValueArgument(0)!!.type != expression.getValueArgument(1)!!.type) {
116-
config.report(CompilerMessageSeverity.WARNING, "Arguments to arithmetic operations are of different types, skipping overflow check")
119+
if (
120+
(expression.valueArgumentsCount != 2 || expression.getValueArgument(0)!!.type != expression.getValueArgument(1)!!.type) &&
121+
(expression.valueArgumentsCount != 1 || !singleArgumentTypeChecks.contains(expression.symbol.owner.name.asString()))
122+
) {
123+
config.report(CompilerMessageSeverity.WARNING, "Unexpected number of arguments for ${expression.symbol.owner.name}, skipping")
117124
return super.visitCall(expression)
118125
}
119126

0 commit comments

Comments
 (0)