1022: attribute expansion: Fix spurious stripping of tail expression r=CohenArthur a=CohenArthur This commit fixes the issue reported in #391, but highlights another one, which will be reported. Closes #391 1033: Fix bad copy-paste in can equal interface for pointer types r=philberty a=philberty When we perform method resolution we check if the self arguments can be matched. Here the bug was that pointer types had a bad vistitor and only could ever match reference types which is wrong and was a copy paste error. Fixes #1031 Addresses #849 Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com> Co-authored-by: Philip Herron <philip.herron@embecosm.com>
This commit is contained in:
commit
3ada3d8365
|
@ -249,7 +249,8 @@ public:
|
|||
BYTE_STRING,
|
||||
INT,
|
||||
FLOAT,
|
||||
BOOL
|
||||
BOOL,
|
||||
ERROR
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -274,11 +275,11 @@ public:
|
|||
|
||||
static Literal create_error ()
|
||||
{
|
||||
return Literal ("", CHAR, PrimitiveCoreType::CORETYPE_UNKNOWN);
|
||||
return Literal ("", ERROR, PrimitiveCoreType::CORETYPE_UNKNOWN);
|
||||
}
|
||||
|
||||
// Returns whether literal is in an invalid state.
|
||||
bool is_error () const { return value_as_string == ""; }
|
||||
bool is_error () const { return type == ERROR; }
|
||||
};
|
||||
|
||||
/* Forward decl - definition moved to rust-expr.h as it requires LiteralExpr to
|
||||
|
|
|
@ -359,6 +359,10 @@ public:
|
|||
case AST::Literal::LitType::BOOL:
|
||||
type = HIR::Literal::LitType::BOOL;
|
||||
break;
|
||||
// Error literals should have been stripped during expansion
|
||||
case AST::Literal::LitType::ERROR:
|
||||
gcc_unreachable ();
|
||||
break;
|
||||
}
|
||||
auto crate_num = mappings->get_current_crate ();
|
||||
Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
|
||||
|
|
|
@ -1240,7 +1240,7 @@ public:
|
|||
: BaseCmp (base, emit_errors), base (base)
|
||||
{}
|
||||
|
||||
void visit (const ReferenceType &type) override
|
||||
void visit (const PointerType &type) override
|
||||
{
|
||||
auto base_type = base->get_base ();
|
||||
auto other_base_type = type.get_base ();
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
extern "rust-intrinsic" {
|
||||
pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
|
||||
}
|
||||
|
||||
#[lang = "const_ptr"]
|
||||
impl<T> *const T {
|
||||
pub const unsafe fn offset(self, count: isize) -> *const T {
|
||||
// { dg-warning "associated function is never used" "" { target *-*-* } .-1 }
|
||||
unsafe { offset(self, count) }
|
||||
}
|
||||
|
||||
pub const unsafe fn add(self, count: usize) -> Self {
|
||||
// { dg-warning "associated function is never used" "" { target *-*-* } .-1 }
|
||||
unsafe { self.offset(count as isize) }
|
||||
}
|
||||
}
|
|
@ -1,3 +1,5 @@
|
|||
fn foo (e: &str) -> &str {
|
||||
&"" // { dg-bogus "cannot strip expression in this position - outer attributes not allowed" "#391" { xfail *-*-* } }
|
||||
// { dg-additional-options "-w" }
|
||||
|
||||
fn foo(e: &str) -> &str { // { dg-bogus "expected" "#391" { xfail *-*-* } }
|
||||
&"" // { dg-bogus "expected" "#391" { xfail *-*-* } }
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue