-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Support/Regex is unaware of LLP64(Win64) #9159
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Looks fine to me, please apply if there are no testsuite regressions. Please send patches to llvm-commits, -Chris |
I have committed above as r121942. /* FIXME: 'states' is assumed as 'long' on small version. */ Consider, to 'states, giving 'uint64_t' on i686,
I see, thank you! |
I don't think we need to do anything here. This workaround has held up fine for four years, and by the time it stops working we can switch to C++11 . This is still marked as blocking a win64 self-host, which already works. Feel free to reopen if you feel otherwise. |
Yes, we won't fix this anymore. :) |
mentioned in issue llvm/llvm-bugzilla-archive#9100 |
Extended Description
in regexec.c:
/* macros for manipulating states, small version /
#define states long / i32 */
#define states1 states
#include "regengine.inc"
/* now undo things */
#undef states
/* macros for manipulating states, large version */
#define states char *
if (g->nstates <= (long)(CHAR_BIT*sizeof(states1)) ...
"states1" is expanded as "char *", and the condition becomes true
even if nstates > 32. Then regex might behave buggy.
Workaround:
--- a/lib/Support/regexec.c
+++ b/lib/Support/regexec.c
@@ -54,8 +54,8 @@
#include "regex2.h"
/* macros for manipulating states, small version /
-#define states long
-#define states1 states / for later use in llvm_regexec() decision /
+#define states1 long / for later use in llvm_regexec() decision */
+#define states states1
#define CLEAR(v) ((v) = 0)
#define SET0(v, n) ((v) &= ~((unsigned long)1 << (n)))
#define SET1(v, n) ((v) |= (unsigned long)1 << (n))
The text was updated successfully, but these errors were encountered: