gccrs: Generate error for const trait functions
Fixes issue #2040 Add check to assure that a function cant be declared const inside trait impl blocks. gcc/rust/ChangeLog: * checks/errors/rust-ast-validation.cc (ASTValidation::visit): Add check for const funtion. gcc/testsuite/ChangeLog: * rust/compile/issue-2040.rs: New test. Signed-off-by: Nobel Singh <nobel2073@gmail.com>
This commit is contained in:
parent
a7991de39f
commit
f48f9a9ac6
2 changed files with 16 additions and 0 deletions
|
@ -103,6 +103,10 @@ ASTValidation::visit (AST::Function &function)
|
|||
rust_error_at (function.get_locus (),
|
||||
"functions cannot be both %<const%> and %<async%>");
|
||||
|
||||
if (qualifiers.is_const () && context.back () == Context::TRAIT_IMPL)
|
||||
rust_error_at (function.get_locus (), ErrorCode::E0379,
|
||||
"functions in traits cannot be declared const");
|
||||
|
||||
if (valid_context.find (context.back ()) == valid_context.end ()
|
||||
&& function.has_self_param ())
|
||||
rust_error_at (
|
||||
|
|
12
gcc/testsuite/rust/compile/issue-2040.rs
Normal file
12
gcc/testsuite/rust/compile/issue-2040.rs
Normal file
|
@ -0,0 +1,12 @@
|
|||
trait Foo {
|
||||
fn f() -> u32;
|
||||
}
|
||||
|
||||
impl Foo for u32 {
|
||||
const fn f() -> u32 {
|
||||
// { dg-error "functions in traits cannot be declared const" "" { target *-*-* } .-1 }
|
||||
22
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
Loading…
Add table
Reference in a new issue