From ce81c8dda9686d3cd78d9c5383b6982c148ac7ec Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 2 Jan 2018 16:41:34 -0500 Subject: Avoid gcc 7.2.1 compiler issues in nlr_push() (#506) Avoid gcc 7.2.1 compiler issues in nlr_push() --- py/nlrthumb.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'py') diff --git a/py/nlrthumb.c b/py/nlrthumb.c index 6e7d71766..0616e59b0 100644 --- a/py/nlrthumb.c +++ b/py/nlrthumb.c @@ -74,7 +74,13 @@ __attribute__((naked)) unsigned int nlr_push(nlr_buf_t *nlr) { #else "b nlr_push_tail \n" // do the rest in C #endif - ); + : // output operands + : "r" (nlr) // input operands + // Do not use r1, r2, r3 as temporary saving registers. + // gcc 7.2.1 started doing this, and r3 got clobbered in nlr_push_tail. + // See https://github.com/adafruit/circuitpython/issues/500 for details. + : "r1", "r2", "r3" // clobbers + ); return 0; // needed to silence compiler warning } -- cgit v1.2.3