Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion libsolidity/ast/ASTUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,12 @@ bool isConstantVariableRecursive(VariableDeclaration const& _varDecl)

auto visitor = [](VariableDeclaration const& _variable, util::CycleDetector<VariableDeclaration>& _cycleDetector, size_t _depth)
{
solAssert(_depth < 256, "Recursion depth limit reached");
if (_depth >= 256)
{
// Signal as cyclic so callers report a proper error instead of an ICE.
_cycleDetector.run(_variable);
return;
}
if (!_variable.value())
// This should result in an error later on.
return;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,266 @@
contract C {
uint256 constant c0 = c1;
uint256 constant c1 = c2;
uint256 constant c2 = c3;
uint256 constant c3 = c4;
uint256 constant c4 = c5;
uint256 constant c5 = c6;
uint256 constant c6 = c7;
uint256 constant c7 = c8;
uint256 constant c8 = c9;
uint256 constant c9 = c10;
uint256 constant c10 = c11;
uint256 constant c11 = c12;
uint256 constant c12 = c13;
uint256 constant c13 = c14;
uint256 constant c14 = c15;
uint256 constant c15 = c16;
uint256 constant c16 = c17;
uint256 constant c17 = c18;
uint256 constant c18 = c19;
uint256 constant c19 = c20;
uint256 constant c20 = c21;
uint256 constant c21 = c22;
uint256 constant c22 = c23;
uint256 constant c23 = c24;
uint256 constant c24 = c25;
uint256 constant c25 = c26;
uint256 constant c26 = c27;
uint256 constant c27 = c28;
uint256 constant c28 = c29;
uint256 constant c29 = c30;
uint256 constant c30 = c31;
uint256 constant c31 = c32;
uint256 constant c32 = c33;
uint256 constant c33 = c34;
uint256 constant c34 = c35;
uint256 constant c35 = c36;
uint256 constant c36 = c37;
uint256 constant c37 = c38;
uint256 constant c38 = c39;
uint256 constant c39 = c40;
uint256 constant c40 = c41;
uint256 constant c41 = c42;
uint256 constant c42 = c43;
uint256 constant c43 = c44;
uint256 constant c44 = c45;
uint256 constant c45 = c46;
uint256 constant c46 = c47;
uint256 constant c47 = c48;
uint256 constant c48 = c49;
uint256 constant c49 = c50;
uint256 constant c50 = c51;
uint256 constant c51 = c52;
uint256 constant c52 = c53;
uint256 constant c53 = c54;
uint256 constant c54 = c55;
uint256 constant c55 = c56;
uint256 constant c56 = c57;
uint256 constant c57 = c58;
uint256 constant c58 = c59;
uint256 constant c59 = c60;
uint256 constant c60 = c61;
uint256 constant c61 = c62;
uint256 constant c62 = c63;
uint256 constant c63 = c64;
uint256 constant c64 = c65;
uint256 constant c65 = c66;
uint256 constant c66 = c67;
uint256 constant c67 = c68;
uint256 constant c68 = c69;
uint256 constant c69 = c70;
uint256 constant c70 = c71;
uint256 constant c71 = c72;
uint256 constant c72 = c73;
uint256 constant c73 = c74;
uint256 constant c74 = c75;
uint256 constant c75 = c76;
uint256 constant c76 = c77;
uint256 constant c77 = c78;
uint256 constant c78 = c79;
uint256 constant c79 = c80;
uint256 constant c80 = c81;
uint256 constant c81 = c82;
uint256 constant c82 = c83;
uint256 constant c83 = c84;
uint256 constant c84 = c85;
uint256 constant c85 = c86;
uint256 constant c86 = c87;
uint256 constant c87 = c88;
uint256 constant c88 = c89;
uint256 constant c89 = c90;
uint256 constant c90 = c91;
uint256 constant c91 = c92;
uint256 constant c92 = c93;
uint256 constant c93 = c94;
uint256 constant c94 = c95;
uint256 constant c95 = c96;
uint256 constant c96 = c97;
uint256 constant c97 = c98;
uint256 constant c98 = c99;
uint256 constant c99 = c100;
uint256 constant c100 = c101;
uint256 constant c101 = c102;
uint256 constant c102 = c103;
uint256 constant c103 = c104;
uint256 constant c104 = c105;
uint256 constant c105 = c106;
uint256 constant c106 = c107;
uint256 constant c107 = c108;
uint256 constant c108 = c109;
uint256 constant c109 = c110;
uint256 constant c110 = c111;
uint256 constant c111 = c112;
uint256 constant c112 = c113;
uint256 constant c113 = c114;
uint256 constant c114 = c115;
uint256 constant c115 = c116;
uint256 constant c116 = c117;
uint256 constant c117 = c118;
uint256 constant c118 = c119;
uint256 constant c119 = c120;
uint256 constant c120 = c121;
uint256 constant c121 = c122;
uint256 constant c122 = c123;
uint256 constant c123 = c124;
uint256 constant c124 = c125;
uint256 constant c125 = c126;
uint256 constant c126 = c127;
uint256 constant c127 = c128;
uint256 constant c128 = c129;
uint256 constant c129 = c130;
uint256 constant c130 = c131;
uint256 constant c131 = c132;
uint256 constant c132 = c133;
uint256 constant c133 = c134;
uint256 constant c134 = c135;
uint256 constant c135 = c136;
uint256 constant c136 = c137;
uint256 constant c137 = c138;
uint256 constant c138 = c139;
uint256 constant c139 = c140;
uint256 constant c140 = c141;
uint256 constant c141 = c142;
uint256 constant c142 = c143;
uint256 constant c143 = c144;
uint256 constant c144 = c145;
uint256 constant c145 = c146;
uint256 constant c146 = c147;
uint256 constant c147 = c148;
uint256 constant c148 = c149;
uint256 constant c149 = c150;
uint256 constant c150 = c151;
uint256 constant c151 = c152;
uint256 constant c152 = c153;
uint256 constant c153 = c154;
uint256 constant c154 = c155;
uint256 constant c155 = c156;
uint256 constant c156 = c157;
uint256 constant c157 = c158;
uint256 constant c158 = c159;
uint256 constant c159 = c160;
uint256 constant c160 = c161;
uint256 constant c161 = c162;
uint256 constant c162 = c163;
uint256 constant c163 = c164;
uint256 constant c164 = c165;
uint256 constant c165 = c166;
uint256 constant c166 = c167;
uint256 constant c167 = c168;
uint256 constant c168 = c169;
uint256 constant c169 = c170;
uint256 constant c170 = c171;
uint256 constant c171 = c172;
uint256 constant c172 = c173;
uint256 constant c173 = c174;
uint256 constant c174 = c175;
uint256 constant c175 = c176;
uint256 constant c176 = c177;
uint256 constant c177 = c178;
uint256 constant c178 = c179;
uint256 constant c179 = c180;
uint256 constant c180 = c181;
uint256 constant c181 = c182;
uint256 constant c182 = c183;
uint256 constant c183 = c184;
uint256 constant c184 = c185;
uint256 constant c185 = c186;
uint256 constant c186 = c187;
uint256 constant c187 = c188;
uint256 constant c188 = c189;
uint256 constant c189 = c190;
uint256 constant c190 = c191;
uint256 constant c191 = c192;
uint256 constant c192 = c193;
uint256 constant c193 = c194;
uint256 constant c194 = c195;
uint256 constant c195 = c196;
uint256 constant c196 = c197;
uint256 constant c197 = c198;
uint256 constant c198 = c199;
uint256 constant c199 = c200;
uint256 constant c200 = c201;
uint256 constant c201 = c202;
uint256 constant c202 = c203;
uint256 constant c203 = c204;
uint256 constant c204 = c205;
uint256 constant c205 = c206;
uint256 constant c206 = c207;
uint256 constant c207 = c208;
uint256 constant c208 = c209;
uint256 constant c209 = c210;
uint256 constant c210 = c211;
uint256 constant c211 = c212;
uint256 constant c212 = c213;
uint256 constant c213 = c214;
uint256 constant c214 = c215;
uint256 constant c215 = c216;
uint256 constant c216 = c217;
uint256 constant c217 = c218;
uint256 constant c218 = c219;
uint256 constant c219 = c220;
uint256 constant c220 = c221;
uint256 constant c221 = c222;
uint256 constant c222 = c223;
uint256 constant c223 = c224;
uint256 constant c224 = c225;
uint256 constant c225 = c226;
uint256 constant c226 = c227;
uint256 constant c227 = c228;
uint256 constant c228 = c229;
uint256 constant c229 = c230;
uint256 constant c230 = c231;
uint256 constant c231 = c232;
uint256 constant c232 = c233;
uint256 constant c233 = c234;
uint256 constant c234 = c235;
uint256 constant c235 = c236;
uint256 constant c236 = c237;
uint256 constant c237 = c238;
uint256 constant c238 = c239;
uint256 constant c239 = c240;
uint256 constant c240 = c241;
uint256 constant c241 = c242;
uint256 constant c242 = c243;
uint256 constant c243 = c244;
uint256 constant c244 = c245;
uint256 constant c245 = c246;
uint256 constant c246 = c247;
uint256 constant c247 = c248;
uint256 constant c248 = c249;
uint256 constant c249 = c250;
uint256 constant c250 = c251;
uint256 constant c251 = c252;
uint256 constant c252 = c253;
uint256 constant c253 = c254;
uint256 constant c254 = c255;
uint256 constant c255 = c256;
uint256 constant c256 = 0;
function f() public pure returns (uint t) {
assembly {
t := c0.slot
}
}
}
// ----
// TypeError 3558: (8614-8621): Constant variable is circular.