From 2ccf0df6162224f2910fde333ecb8f9ecb2bcaf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Sat, 7 Dec 2024 02:38:29 +0100 Subject: [PATCH] CompilerStack: Use location of the current contract as default location in post-analysis errors --- Changelog.md | 1 + libsolidity/interface/CompilerStack.cpp | 43 ++++++++++++++++--- libsolidity/interface/CompilerStack.h | 8 +++- libyul/YulStack.cpp | 3 ++ .../output.json | 9 ++++ .../operators/shifts/shr_unused.sol | 2 +- .../array/nested_calldata_storage.sol | 2 +- .../array/nested_calldata_storage2.sol | 2 +- .../constants/mod_div_rational.sol | 2 +- .../builtin/builtin_type_definition.sol | 2 +- .../syntaxTests/immutable/no_assignments.sol | 2 +- .../inline_array_fixed_types.sol | 2 +- .../inline_arrays/inline_array_rationals.sol | 2 +- .../303_fixed_type_int_conversion.sol | 2 +- ...304_fixed_type_rational_int_conversion.sol | 2 +- ...ixed_type_rational_fraction_conversion.sol | 2 +- .../307_rational_unary_minus_operation.sol | 2 +- .../312_leading_zero_rationals_convert.sol | 2 +- .../314_fixed_type_zero_handling.sol | 2 +- ..._fixed_type_valid_explicit_conversions.sol | 2 +- .../323_mapping_with_fixed_literal.sol | 2 +- .../324_fixed_points_inside_structs.sol | 2 +- ...8_rational_to_fixed_literal_expression.sol | 2 +- .../343_integer_and_fixed_interaction.sol | 2 +- .../declaring_fixed_and_ufixed_variables.sol | 2 +- .../lexer_numbers_with_underscores_fixed.sol | 2 +- ...ional_number_literal_to_fixed_implicit.sol | 2 +- 27 files changed, 77 insertions(+), 31 deletions(-) diff --git a/Changelog.md b/Changelog.md index 9aaa1ca8b022..731640653d5a 100644 --- a/Changelog.md +++ b/Changelog.md @@ -4,6 +4,7 @@ Language Features: Compiler Features: + * Error Reporting: Errors reported during code generation now point at the location of the contract when more fine-grained location is not available. * SMTChecker: Z3 is now a runtime dependency, not a build dependency (except for emscripten build). diff --git a/libsolidity/interface/CompilerStack.cpp b/libsolidity/interface/CompilerStack.cpp index 9649b79c842a..9d76ced02330 100644 --- a/libsolidity/interface/CompilerStack.cpp +++ b/libsolidity/interface/CompilerStack.cpp @@ -779,11 +779,11 @@ bool CompilerStack::compile(State _stopAfter) } catch (Error const& _error) { - m_errorReporter.codeGenerationError(_error); + reportCodeGenerationError(_error, contract); } catch (UnimplementedFeatureError const& _error) { - reportUnimplementedFeatureError(_error); + reportUnimplementedFeatureError(_error, contract); } if (m_errorReporter.hasErrors()) @@ -1614,7 +1614,7 @@ void CompilerStack::generateEVMFromIR(ContractDefinition const& _contract) if (stack.hasErrors()) { for (std::shared_ptr const& error: stack.errors()) - reportIRPostAnalysisError(error.get()); + reportIRPostAnalysisError(error.get(), compiledContract.contract); return; } @@ -2010,18 +2010,47 @@ experimental::Analysis const& CompilerStack::experimentalAnalysis() const return *m_experimentalAnalysis; } -void CompilerStack::reportUnimplementedFeatureError(UnimplementedFeatureError const& _error) +void CompilerStack::reportUnimplementedFeatureError( + UnimplementedFeatureError const& _error, + ContractDefinition const* _contractDefinition +) { solAssert(_error.comment(), "Errors must include a message for the user."); + if (_error.sourceLocation().sourceName) + solAssert(m_sources.count(*_error.sourceLocation().sourceName) != 0); + + m_errorReporter.unimplementedFeatureError( + 1834_error, + (_error.sourceLocation().sourceName || !_contractDefinition) ? + _error.sourceLocation() : + _contractDefinition->location(), + *_error.comment() + ); +} - m_errorReporter.unimplementedFeatureError(1834_error, _error.sourceLocation(), *_error.comment()); +void CompilerStack::reportCodeGenerationError(Error const& _error, ContractDefinition const* _contractDefinition) +{ + solAssert(_error.type() == Error::Type::CodeGenerationError); + solAssert(_error.comment(), "Errors must include a message for the user."); + if (_error.sourceLocation() && _error.sourceLocation()->sourceName) + solAssert(m_sources.count(*_error.sourceLocation()->sourceName) != 0); + solAssert(_contractDefinition); + + m_errorReporter.codeGenerationError( + _error.errorId(), + (_error.sourceLocation() && _error.sourceLocation()->sourceName) ? + *_error.sourceLocation() : + _contractDefinition->location(), + *_error.comment() + ); } -void CompilerStack::reportIRPostAnalysisError(Error const* _error) +void CompilerStack::reportIRPostAnalysisError(Error const* _error, ContractDefinition const* _contractDefinition) { solAssert(_error); solAssert(_error->comment(), "Errors must include a message for the user."); solAssert(!_error->secondarySourceLocation()); + solAssert(_contractDefinition); // Do not report Yul warnings and infos. These are only reported in pure Yul compilation. if (!Error::isError(_error->severity())) @@ -2032,7 +2061,7 @@ void CompilerStack::reportIRPostAnalysisError(Error const* _error) _error->type(), // Ignore the original location. It's likely missing, but even if not, it points at Yul source. // CompilerStack can only point at locations in Solidity sources. - SourceLocation{}, + _contractDefinition->location(), *_error->comment() ); } diff --git a/libsolidity/interface/CompilerStack.h b/libsolidity/interface/CompilerStack.h index 81a039403b9b..f36eedde0611 100644 --- a/libsolidity/interface/CompilerStack.h +++ b/libsolidity/interface/CompilerStack.h @@ -578,8 +578,12 @@ class CompilerStack: public langutil::CharStreamProvider, public evmasm::Abstrac FunctionDefinition const& _function ) const; - void reportUnimplementedFeatureError(langutil::UnimplementedFeatureError const& _error); - void reportIRPostAnalysisError(langutil::Error const* _error); + void reportUnimplementedFeatureError( + langutil::UnimplementedFeatureError const& _error, + ContractDefinition const* _contractDefinition = nullptr + ); + void reportCodeGenerationError(langutil::Error const& _error, ContractDefinition const* _contractDefinition); + void reportIRPostAnalysisError(langutil::Error const* _error, ContractDefinition const* _contractDefinition); ReadCallback::Callback m_readFile; OptimiserSettings m_optimiserSettings; diff --git a/libyul/YulStack.cpp b/libyul/YulStack.cpp index 791b7103ded8..03e22c8d1a80 100644 --- a/libyul/YulStack.cpp +++ b/libyul/YulStack.cpp @@ -439,6 +439,9 @@ Dialect const& YulStack::dialect() const void YulStack::reportUnimplementedFeatureError(UnimplementedFeatureError const& _error) { + yulAssert(m_charStream); yulAssert(_error.comment(), "Errors must include a message for the user."); + if (_error.sourceLocation().sourceName) + yulAssert(*_error.sourceLocation().sourceName == m_charStream->name()); m_errorReporter.unimplementedFeatureError(1920_error, _error.sourceLocation(), *_error.comment()); } diff --git a/test/cmdlineTests/standard_outputs_on_compilation_error/output.json b/test/cmdlineTests/standard_outputs_on_compilation_error/output.json index e0f4e37e6ae0..0fa7fcff3cda 100644 --- a/test/cmdlineTests/standard_outputs_on_compilation_error/output.json +++ b/test/cmdlineTests/standard_outputs_on_compilation_error/output.json @@ -54,10 +54,19 @@ "component": "general", "errorCode": "1284", "formattedMessage": "CodeGenerationError: Some immutables were read from but never assigned, possibly because of optimization. + --> C:4:1: + | +4 | contract C { + | ^ (Relevant source part starts here and spans across multiple lines). ", "message": "Some immutables were read from but never assigned, possibly because of optimization.", "severity": "error", + "sourceLocation": { + "end": 320, + "file": "C", + "start": 56 + }, "type": "CodeGenerationError" } ], diff --git a/test/libsolidity/smtCheckerTests/operators/shifts/shr_unused.sol b/test/libsolidity/smtCheckerTests/operators/shifts/shr_unused.sol index 50438175895e..2134068db614 100644 --- a/test/libsolidity/smtCheckerTests/operators/shifts/shr_unused.sol +++ b/test/libsolidity/smtCheckerTests/operators/shifts/shr_unused.sol @@ -8,4 +8,4 @@ contract C { // SMTEngine: all // ---- // Info 1391: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-80): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/array/nested_calldata_storage.sol b/test/libsolidity/syntaxTests/array/nested_calldata_storage.sol index 18bf550c066b..9aa5fce1211a 100644 --- a/test/libsolidity/syntaxTests/array/nested_calldata_storage.sol +++ b/test/libsolidity/syntaxTests/array/nested_calldata_storage.sol @@ -6,4 +6,4 @@ contract C { } // ---- -// UnimplementedFeatureError 1834: Copying nested calldata dynamic arrays to storage is not implemented in the old code generator. +// UnimplementedFeatureError 1834: (35-127): Copying nested calldata dynamic arrays to storage is not implemented in the old code generator. diff --git a/test/libsolidity/syntaxTests/array/nested_calldata_storage2.sol b/test/libsolidity/syntaxTests/array/nested_calldata_storage2.sol index 9f5bb8eab5b1..f1125b4d232b 100644 --- a/test/libsolidity/syntaxTests/array/nested_calldata_storage2.sol +++ b/test/libsolidity/syntaxTests/array/nested_calldata_storage2.sol @@ -6,4 +6,4 @@ contract C { } // ---- -// UnimplementedFeatureError 1834: Copying nested calldata dynamic arrays to storage is not implemented in the old code generator. +// UnimplementedFeatureError 1834: (35-125): Copying nested calldata dynamic arrays to storage is not implemented in the old code generator. diff --git a/test/libsolidity/syntaxTests/constants/mod_div_rational.sol b/test/libsolidity/syntaxTests/constants/mod_div_rational.sol index 5c127eb4a253..68d3bfc7ae03 100644 --- a/test/libsolidity/syntaxTests/constants/mod_div_rational.sol +++ b/test/libsolidity/syntaxTests/constants/mod_div_rational.sol @@ -5,4 +5,4 @@ contract C { fixed a4 = 0 / -0.123; } // ---- -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-150): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/experimental/builtin/builtin_type_definition.sol b/test/libsolidity/syntaxTests/experimental/builtin/builtin_type_definition.sol index ed7db1ec6c8b..858b9132dd32 100644 --- a/test/libsolidity/syntaxTests/experimental/builtin/builtin_type_definition.sol +++ b/test/libsolidity/syntaxTests/experimental/builtin/builtin_type_definition.sol @@ -89,4 +89,4 @@ contract C { // Info 4164: (563-574): Inferred type: (bool, word) -> word // Info 4164: (563-567): Inferred type: (?bm:type, ?bn:type) // Info 4164: (575-576): Inferred type: (bool, word) -// UnimplementedFeatureError 1834: No support for calling functions pointers yet. +// UnimplementedFeatureError 1834: (267-586): No support for calling functions pointers yet. diff --git a/test/libsolidity/syntaxTests/immutable/no_assignments.sol b/test/libsolidity/syntaxTests/immutable/no_assignments.sol index 7357d174a8d5..7d7948671419 100644 --- a/test/libsolidity/syntaxTests/immutable/no_assignments.sol +++ b/test/libsolidity/syntaxTests/immutable/no_assignments.sol @@ -10,4 +10,4 @@ contract C { // ==== // optimize-yul: true // ---- -// CodeGenerationError 1284: Some immutables were read from but never assigned, possibly because of optimization. +// CodeGenerationError 1284: (0-168): Some immutables were read from but never assigned, possibly because of optimization. diff --git a/test/libsolidity/syntaxTests/inline_arrays/inline_array_fixed_types.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_fixed_types.sol index 604f9b029800..8e51bd1886c1 100644 --- a/test/libsolidity/syntaxTests/inline_arrays/inline_array_fixed_types.sol +++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_fixed_types.sol @@ -6,4 +6,4 @@ contract test { // ---- // Warning 2072: (50-67): Unused local variable. // Warning 2018: (20-119): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-121): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/inline_arrays/inline_array_rationals.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_rationals.sol index 63df5c044916..0382672fe38e 100644 --- a/test/libsolidity/syntaxTests/inline_arrays/inline_array_rationals.sol +++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_rationals.sol @@ -6,4 +6,4 @@ contract test { // ---- // Warning 2072: (50-73): Unused local variable. // Warning 2018: (20-118): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-120): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/303_fixed_type_int_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/303_fixed_type_int_conversion.sol index 58c74b9ad0b8..88a407fef98d 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/303_fixed_type_int_conversion.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/303_fixed_type_int_conversion.sol @@ -9,4 +9,4 @@ contract test { } // ---- // Warning 2018: (20-147): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-149): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/304_fixed_type_rational_int_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/304_fixed_type_rational_int_conversion.sol index 404cbc4bce0d..0e3cb3b6cb47 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/304_fixed_type_rational_int_conversion.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/304_fixed_type_rational_int_conversion.sol @@ -7,4 +7,4 @@ contract test { } // ---- // Warning 2018: (20-104): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-106): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/305_fixed_type_rational_fraction_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/305_fixed_type_rational_fraction_conversion.sol index b113c6bcce52..ada627037e49 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/305_fixed_type_rational_fraction_conversion.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/305_fixed_type_rational_fraction_conversion.sol @@ -7,4 +7,4 @@ contract test { } // ---- // Warning 2018: (20-108): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-110): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/307_rational_unary_minus_operation.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/307_rational_unary_minus_operation.sol index e80024a98ad8..adb9fbe699ce 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/307_rational_unary_minus_operation.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/307_rational_unary_minus_operation.sol @@ -6,4 +6,4 @@ contract test { } } // ---- -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-126): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/312_leading_zero_rationals_convert.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/312_leading_zero_rationals_convert.sol index 20be0208c11f..e763fa18be20 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/312_leading_zero_rationals_convert.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/312_leading_zero_rationals_convert.sol @@ -8,4 +8,4 @@ contract A { } } // ---- -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-289): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/314_fixed_type_zero_handling.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/314_fixed_type_zero_handling.sol index 7415ed6e85f0..b9205f01b1d9 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/314_fixed_type_zero_handling.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/314_fixed_type_zero_handling.sol @@ -6,4 +6,4 @@ contract test { } // ---- // Warning 2018: (20-104): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-106): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol index fa32ec7dd86a..1282c24daf89 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol @@ -7,4 +7,4 @@ contract test { } // ---- // Warning 2018: (20-182): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-184): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/323_mapping_with_fixed_literal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/323_mapping_with_fixed_literal.sol index cb730221dfcd..3ee670cd585c 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/323_mapping_with_fixed_literal.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/323_mapping_with_fixed_literal.sol @@ -5,4 +5,4 @@ contract test { } } // ---- -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-130): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/324_fixed_points_inside_structs.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/324_fixed_points_inside_structs.sol index 9bc6243029d1..ba467a67b131 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/324_fixed_points_inside_structs.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/324_fixed_points_inside_structs.sol @@ -6,4 +6,4 @@ contract test { myStruct a = myStruct(3.125, 3); } // ---- -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-115): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/328_rational_to_fixed_literal_expression.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/328_rational_to_fixed_literal_expression.sol index 8391734aec0f..b5162bcd9720 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/328_rational_to_fixed_literal_expression.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/328_rational_to_fixed_literal_expression.sol @@ -13,4 +13,4 @@ contract test { // ---- // Warning 2519: (238-252): This declaration shadows an existing declaration. // Warning 2018: (20-339): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-341): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/343_integer_and_fixed_interaction.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/343_integer_and_fixed_interaction.sol index 15ca25931efd..3ebd54d4541a 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/343_integer_and_fixed_interaction.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/343_integer_and_fixed_interaction.sol @@ -6,4 +6,4 @@ contract test { // ---- // Warning 2072: (50-58): Unused local variable. // Warning 2018: (20-89): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-91): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/parsing/declaring_fixed_and_ufixed_variables.sol b/test/libsolidity/syntaxTests/parsing/declaring_fixed_and_ufixed_variables.sol index ea41bbf3ec7a..2518a4b57e47 100644 --- a/test/libsolidity/syntaxTests/parsing/declaring_fixed_and_ufixed_variables.sol +++ b/test/libsolidity/syntaxTests/parsing/declaring_fixed_and_ufixed_variables.sol @@ -11,4 +11,4 @@ contract A { // Warning 2072: (93-104): Unused local variable. // Warning 2072: (114-121): Unused local variable. // Warning 2018: (41-128): Function state mutability can be restricted to pure -// UnimplementedFeatureError 1834: Fixed point types not implemented. +// UnimplementedFeatureError 1834: (0-130): Fixed point types not implemented. diff --git a/test/libsolidity/syntaxTests/parsing/lexer_numbers_with_underscores_fixed.sol b/test/libsolidity/syntaxTests/parsing/lexer_numbers_with_underscores_fixed.sol index 9932c4c3d48b..9346264edbcd 100644 --- a/test/libsolidity/syntaxTests/parsing/lexer_numbers_with_underscores_fixed.sol +++ b/test/libsolidity/syntaxTests/parsing/lexer_numbers_with_underscores_fixed.sol @@ -7,4 +7,4 @@ contract C { } } // ---- -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-109): Not yet implemented - FixedPointType. diff --git a/test/libsolidity/syntaxTests/types/rational_number_literal_to_fixed_implicit.sol b/test/libsolidity/syntaxTests/types/rational_number_literal_to_fixed_implicit.sol index a93555fd7120..e62728770d90 100644 --- a/test/libsolidity/syntaxTests/types/rational_number_literal_to_fixed_implicit.sol +++ b/test/libsolidity/syntaxTests/types/rational_number_literal_to_fixed_implicit.sol @@ -13,4 +13,4 @@ contract C { } } // ---- -// UnimplementedFeatureError 1834: Not yet implemented - FixedPointType. +// UnimplementedFeatureError 1834: (0-317): Not yet implemented - FixedPointType.