OSDN Git Service

PR bootstrap/50237
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Dec 2011 22:05:59 +0000 (22:05 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Dec 2011 22:05:59 +0000 (22:05 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182090 138bc75d-0d04-0410-961f-82ee72b054a4

libcpp/ChangeLog
libcpp/init.c
libcpp/internal.h
libcpp/lex.c

index f47bf03..890075d 100644 (file)
@@ -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)
index 9101b34..ff006b1 100644 (file)
@@ -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.  */
index b3dc2df..7e2932a 100644 (file)
@@ -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 *);
index fcec329..0ad9660 100644 (file)
@@ -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