aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-12-07 23:05:59 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2011-12-07 23:05:59 +0100
commitb0c084b712f2516593123613170d8bc1a6afa44b (patch)
tree4c4b018e43b3666acb5b9a2b111beb302182fae9
parentff180d72d9b327acc96bfacf45af71dac5b04006 (diff)
downloadgcc-b0c084b712f2516593123613170d8bc1a6afa44b.zip
gcc-b0c084b712f2516593123613170d8bc1a6afa44b.tar.gz
gcc-b0c084b712f2516593123613170d8bc1a6afa44b.tar.bz2
re PR bootstrap/50237 (bootstrap comparison failure for libcpp/lex.o)
PR bootstrap/50237 * internal.h (_cpp_init_lexer): New prototype. * init.c (init_library): Call it. * lex.c (init_vectorized_lexer): Remove constructor attribute, add inline keyword. (HAVE_init_vectorized_lexer): Define. (_cpp_init_lexer): New function. From-SVN: r182090
-rw-r--r--libcpp/ChangeLog10
-rw-r--r--libcpp/init.c2
-rw-r--r--libcpp/internal.h1
-rw-r--r--libcpp/lex.c13
4 files changed, 25 insertions, 1 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index f47bf03..890075d 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,13 @@
+2011-12-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR bootstrap/50237
+ * internal.h (_cpp_init_lexer): New prototype.
+ * init.c (init_library): Call it.
+ * lex.c (init_vectorized_lexer): Remove constructor attribute,
+ add inline keyword.
+ (HAVE_init_vectorized_lexer): Define.
+ (_cpp_init_lexer): New function.
+
2011-12-03 Dodji Seketeli <dodji@redhat.com>
* macro.c (tokens_buff_remove_last_token)
diff --git a/libcpp/init.c b/libcpp/init.c
index 9101b34..ff006b1 100644
--- a/libcpp/init.c
+++ b/libcpp/init.c
@@ -134,6 +134,8 @@ init_library (void)
{
initialized = 1;
+ _cpp_init_lexer ();
+
/* Set up the trigraph map. This doesn't need to do anything if
we were compiled with a compiler that supports C99 designated
initializers. */
diff --git a/libcpp/internal.h b/libcpp/internal.h
index b3dc2df..7e2932a 100644
--- a/libcpp/internal.h
+++ b/libcpp/internal.h
@@ -653,6 +653,7 @@ extern int _cpp_equiv_tokens (const cpp_token *, const cpp_token *);
extern void _cpp_init_tokenrun (tokenrun *, unsigned int);
extern cpp_hashnode *_cpp_lex_identifier (cpp_reader *, const char *);
extern int _cpp_remaining_tokens_num_in_context (cpp_context *);
+extern void _cpp_init_lexer (void);
/* In init.c. */
extern void _cpp_maybe_push_include_file (cpp_reader *);
diff --git a/libcpp/lex.c b/libcpp/lex.c
index fcec329..0ad9660 100644
--- a/libcpp/lex.c
+++ b/libcpp/lex.c
@@ -477,7 +477,8 @@ search_line_sse42 (const uchar *s, const uchar *end)
typedef const uchar * (*search_line_fast_type) (const uchar *, const uchar *);
static search_line_fast_type search_line_fast;
-static void __attribute__((constructor))
+#define HAVE_init_vectorized_lexer 1
+static inline void
init_vectorized_lexer (void)
{
unsigned dummy, ecx = 0, edx = 0;
@@ -638,6 +639,16 @@ search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
#endif
+/* Initialize the lexer if needed. */
+
+void
+_cpp_init_lexer (void)
+{
+#ifdef HAVE_init_vectorized_lexer
+ init_vectorized_lexer ();
+#endif
+}
+
/* Returns with a logical line that contains no escaped newlines or
trigraphs. This is a time-critical inner loop. */
void