Skip to content

Commit 6f488b9

Browse files
committed
Rename functions giving WF clauses for builtin types
1 parent 7b8da79 commit 6f488b9

File tree

1 file changed

+38
-21
lines changed

1 file changed

+38
-21
lines changed

src/librustc_traits/chalk_context/program_clauses.rs

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ fn assemble_clauses_from_assoc_ty_values<'tcx>(
4949
}
5050

5151

52-
fn program_clauses_for_raw_ptr<'tcx>(
52+
fn wf_clause_for_raw_ptr<'tcx>(
5353
tcx: ty::TyCtxt<'_, '_, 'tcx>,
5454
mutbl: hir::Mutability
5555
) -> Clauses<'tcx> {
@@ -66,7 +66,7 @@ fn program_clauses_for_raw_ptr<'tcx>(
6666
tcx.mk_clauses(iter::once(wf_clause))
6767
}
6868

69-
fn program_clauses_for_fn_ptr<'tcx>(
69+
fn wf_clause_for_fn_ptr<'tcx>(
7070
tcx: ty::TyCtxt<'_, '_, 'tcx>,
7171
arity_and_output: usize,
7272
variadic: bool,
@@ -87,7 +87,7 @@ fn program_clauses_for_fn_ptr<'tcx>(
8787
tcx.mk_clauses(iter::once(wf_clause))
8888
}
8989

90-
fn program_clauses_for_slice<'tcx>(tcx: ty::TyCtxt<'_, '_, 'tcx>) -> Clauses<'tcx> {
90+
fn wf_clause_for_slice<'tcx>(tcx: ty::TyCtxt<'_, '_, 'tcx>) -> Clauses<'tcx> {
9191
let ty = generic_types::bound(tcx, 0);
9292
let slice_ty = tcx.mk_slice(ty);
9393

@@ -116,7 +116,7 @@ fn program_clauses_for_slice<'tcx>(tcx: ty::TyCtxt<'_, '_, 'tcx>) -> Clauses<'tc
116116
tcx.mk_clauses(iter::once(wf_clause))
117117
}
118118

119-
fn program_clauses_for_array<'tcx>(
119+
fn wf_clause_for_array<'tcx>(
120120
tcx: ty::TyCtxt<'_, '_, 'tcx>,
121121
length: &'tcx ty::Const<'tcx>
122122
) -> Clauses<'tcx> {
@@ -148,7 +148,7 @@ fn program_clauses_for_array<'tcx>(
148148
tcx.mk_clauses(iter::once(wf_clause))
149149
}
150150

151-
fn program_clauses_for_tuple<'tcx>(
151+
fn wf_clause_for_tuple<'tcx>(
152152
tcx: ty::TyCtxt<'_, '_, 'tcx>,
153153
arity: usize
154154
) -> Clauses<'tcx> {
@@ -189,7 +189,7 @@ fn program_clauses_for_tuple<'tcx>(
189189
tcx.mk_clauses(iter::once(wf_clause))
190190
}
191191

192-
fn program_clauses_for_ref<'tcx>(
192+
fn wf_clause_for_ref<'tcx>(
193193
tcx: ty::TyCtxt<'_, '_, 'tcx>,
194194
mutbl: hir::Mutability
195195
) -> Clauses<'tcx> {
@@ -202,13 +202,16 @@ fn program_clauses_for_ref<'tcx>(
202202
mutbl,
203203
});
204204

205-
let outlives: DomainGoal = ty::OutlivesPredicate(ty, region).lower();
205+
let _outlives: DomainGoal = ty::OutlivesPredicate(ty, region).lower();
206206
let wf_clause = ProgramClause {
207207
goal: DomainGoal::WellFormed(WellFormed::Ty(ref_ty)),
208-
hypotheses: tcx.mk_goals(
209-
iter::once(tcx.mk_goal(outlives.into_goal()))
210-
),
211-
category: ProgramClauseCategory::ImpliedBound,
208+
hypotheses: ty::List::empty(),
209+
210+
// FIXME: restore this later once we get better at handling regions
211+
// hypotheses: tcx.mk_goals(
212+
// iter::once(tcx.mk_goal(outlives.into_goal()))
213+
// ),
214+
category: ProgramClauseCategory::WellFormed,
212215
};
213216
let wf_clause = Clause::ForAll(ty::Binder::bind(wf_clause));
214217

@@ -323,6 +326,8 @@ impl ChalkInferenceContext<'cx, 'gcx, 'tcx> {
323326
ty::Float(..) |
324327
ty::Str |
325328
ty::Param(..) |
329+
ty::Placeholder(..) |
330+
ty::Error |
326331
ty::Never => {
327332
let wf_clause = ProgramClause {
328333
goal: DomainGoal::WellFormed(WellFormed::Ty(ty)),
@@ -335,12 +340,12 @@ impl ChalkInferenceContext<'cx, 'gcx, 'tcx> {
335340
}
336341

337342
// Always WF (recall that we do not check for parameters to be WF).
338-
ty::RawPtr(ptr) => program_clauses_for_raw_ptr(self.infcx.tcx, ptr.mutbl),
343+
ty::RawPtr(ptr) => wf_clause_for_raw_ptr(self.infcx.tcx, ptr.mutbl),
339344

340345
// Always WF (recall that we do not check for parameters to be WF).
341346
ty::FnPtr(fn_ptr) => {
342347
let fn_ptr = fn_ptr.skip_binder();
343-
program_clauses_for_fn_ptr(
348+
wf_clause_for_fn_ptr(
344349
self.infcx.tcx,
345350
fn_ptr.inputs_and_output.len(),
346351
fn_ptr.variadic,
@@ -350,19 +355,19 @@ impl ChalkInferenceContext<'cx, 'gcx, 'tcx> {
350355
}
351356

352357
// WF if inner type is `Sized`.
353-
ty::Slice(..) => program_clauses_for_slice(self.infcx.tcx),
358+
ty::Slice(..) => wf_clause_for_slice(self.infcx.tcx),
354359

355360
// WF if inner type is `Sized`.
356-
ty::Array(_, length) => program_clauses_for_array(self.infcx.tcx, length),
361+
ty::Array(_, length) => wf_clause_for_array(self.infcx.tcx, length),
357362

358363
// WF if all types but the last one are `Sized`.
359-
ty::Tuple(types) => program_clauses_for_tuple(
364+
ty::Tuple(types) => wf_clause_for_tuple(
360365
self.infcx.tcx,
361366
types.len()
362367
),
363368

364369
// WF if `sub_ty` outlives `region`.
365-
ty::Ref(_, _, mutbl) => program_clauses_for_ref(self.infcx.tcx, mutbl),
370+
ty::Ref(_, _, mutbl) => wf_clause_for_ref(self.infcx.tcx, mutbl),
366371

367372
ty::Dynamic(..) => {
368373
// FIXME: no rules yet for trait objects
@@ -381,12 +386,24 @@ impl ChalkInferenceContext<'cx, 'gcx, 'tcx> {
381386
self.infcx.tcx.program_clauses_for(def_id)
382387
}
383388

389+
// Artificially trigger an ambiguity.
390+
ty::Infer(..) => {
391+
let tcx = self.infcx.tcx;
392+
let types = [tcx.types.i32, tcx.types.u32, tcx.types.f32, tcx.types.f64];
393+
let clauses = types.iter()
394+
.cloned()
395+
.map(|ty| ProgramClause {
396+
goal: DomainGoal::WellFormed(WellFormed::Ty(ty)),
397+
hypotheses: ty::List::empty(),
398+
category: ProgramClauseCategory::WellFormed,
399+
})
400+
.map(|clause| Clause::Implies(clause));
401+
tcx.mk_clauses(clauses)
402+
}
403+
384404
ty::GeneratorWitness(..) |
385-
ty::Placeholder(..) |
386405
ty::UnnormalizedProjection(..) |
387-
ty::Infer(..) |
388-
ty::Bound(..) |
389-
ty::Error => {
406+
ty::Bound(..) => {
390407
bug!("unexpected type {:?}", ty)
391408
}
392409
};

0 commit comments

Comments
 (0)