aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/backend')
-rw-r--r--gcc/rust/backend/rust-compile-type.cc12
-rw-r--r--gcc/rust/backend/rust-compile-type.h7
2 files changed, 11 insertions, 8 deletions
diff --git a/gcc/rust/backend/rust-compile-type.cc b/gcc/rust/backend/rust-compile-type.cc
index 3874027..102bc0a 100644
--- a/gcc/rust/backend/rust-compile-type.cc
+++ b/gcc/rust/backend/rust-compile-type.cc
@@ -112,9 +112,15 @@ TyTyResolveCompile::visit (const TyTy::PlaceholderType &type)
void
TyTyResolveCompile::visit (const TyTy::ParamType &param)
{
- // FIXME make this reuse the same machinery from constexpr code
- recursion_count++;
- rust_assert (recursion_count < kDefaultRecusionLimit);
+ if (recurisve_ops++ >= rust_max_recursion_depth)
+ {
+ rust_error_at (Location (),
+ "%<recursion depth%> count exceeds limit of %i (use "
+ "%<frust-max-recursion-depth=%> to increase the limit)",
+ rust_max_recursion_depth);
+ translated = error_mark_node;
+ return;
+ }
param.resolve ()->accept_vis (*this);
}
diff --git a/gcc/rust/backend/rust-compile-type.h b/gcc/rust/backend/rust-compile-type.h
index 3e1f903..262b8fc 100644
--- a/gcc/rust/backend/rust-compile-type.h
+++ b/gcc/rust/backend/rust-compile-type.h
@@ -63,16 +63,13 @@ public:
private:
TyTyResolveCompile (Context *ctx, bool trait_object_mode)
: ctx (ctx), trait_object_mode (trait_object_mode),
- translated (error_mark_node), recursion_count (0)
+ translated (error_mark_node), recurisve_ops (0)
{}
Context *ctx;
bool trait_object_mode;
tree translated;
-
- // FIXME this needs to be derived from the gcc config option
- size_t recursion_count;
- static const size_t kDefaultRecusionLimit = 5;
+ int recurisve_ops;
};
} // namespace Compile