When compiling something like:
pragma solidity ^0.4.12;
contract C {
function f() {
uint[] x = inexistentIdentifier;
x.push(1);
}
}
In Remix the 0.4.12-release compiler version throws this exception:
Internal exception in StandardCompiler::compileInternal: /src/libsolidity/ast/ASTJsonConverter.cpp(791): Throw in function string dev::solidity::ASTJsonConverter::functionCallKind(dev::solidity::FunctionCallKind)
Dynamic exception type: N5boost16exception_detail10clone_implIN3dev8solidity21InternalCompilerErrorEEE
std::exception::what: std::exception
[PN3dev11tag_commentE] = Unknown kind of function call .
Expected behaviour would be:
Undeclared identifier.
If no member of x is used, though, the exception is not thrown.
Wonderful, we were looking for this bug! Strangely, I cannot reproduce that with latest develop.
.. but I can reproduce it on remix as you say.
Going to try locally with last develop, too.
EDIT: Just built 0.4.13-develop.2017.7.5+commit.05a26fc9.Darwin.appleclang from source and it does error properly:
contract.sol:10:20: Error: Undeclared identifier.
Also on another note, 0.4.12 changelog says:
Inline Assembly: Warn when using `jump`s.
But Remix presents an error and prevents compilation of the contracts.
Should I open another issue?
This issue is fine, the component is certainly solidity. Why do you think the inline assembly change is related?
Sorry for the confusion! I meant "on a totally unrelated note:"! 馃槃
That's a different issue where Remix is not treating inline assembly jumps as a warning but as an error which prevents compilation altogether.
Yes, this issue also has a pending fix already. We try to make a bugfix release as soon as possible.
Most helpful comment
Yes, this issue also has a pending fix already. We try to make a bugfix release as soon as possible.