argotorg / argotorg/solidity

`isConstant` annotation in the AST is always false

Open
#16,419 1 comment 1 reaction 2 assignees Claimed by @rodiazet View on GitHub
bug :bug: low effort low impact must have eventually
Dominant language
C++
Stars
25.7k
Forks
6.2k
Avg merge
2d 19h
Merged PRs (30d)
29

Description

## Description

`isConstant` in the AST is supposed to be true when the node is an identifier (or member access) that refers to a `constant` variable. This appears to be true internally, but in the exported AST the annotation is false instead.

## Environment
Reproducible on 0.8.33, `develop` and as far back as 0.5.0.

## Steps to Reproduce
```solidity
uint constant X = 1234;

contract C {
uint constant Y = 5678;

function f() public returns (uint) {
return X + Y;
}
}
```
```
solc test.sol --ast-compact-json --pretty-json --json-indent 4 | grep isConstant
```
```
"isConstant": false,
"isConstant": false,
"isConstant": false,
```

The bug is likely to be in the JSON exporter. I checked the place where we assign the value during analysis by placing an assertion there and the value is true but only false is present in the JSON output: https://github.com/argotorg/solidity/blob/64118f21280f0196f491689f0fc93dc5bec20dc1/libsolidity/analysis/TypeChecker.cpp#L3698

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.