[llvm-commits] [llvm-gcc-4.2] r46463 - in /llvm-gcc-4.2/trunk: gcc/config/darwin.h libcpp/directives.c libcpp/internal.h libcpp/lex.c

Bill Wendling isanbard at gmail.com
Mon Jan 28 13:47:12 PST 2008


Author: void
Date: Mon Jan 28 15:47:12 2008
New Revision: 46463

URL: http://llvm.org/viewvc/llvm-project?rev=46463&view=rev
Log:
This program:

$ cat testcase.c
#pragma mark Mike's world
#ifdef DO_ERROR
#error Mike's world
#endif
int i;

Gives us these warnings:

pragma-2.c:1:18: warning: missing terminating ' character
pragma-2.c:3:12: warning: missing terminating ' character

We should ignore unbalanced quotes in these pragmas. Porting fixes from Apple
GCC.

Modified:
    llvm-gcc-4.2/trunk/gcc/config/darwin.h
    llvm-gcc-4.2/trunk/libcpp/directives.c
    llvm-gcc-4.2/trunk/libcpp/internal.h
    llvm-gcc-4.2/trunk/libcpp/lex.c

Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.h?rev=46463&r1=46462&r2=46463&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/darwin.h Mon Jan 28 15:47:12 2008
@@ -1162,10 +1162,9 @@
 
 #define DARWIN_REGISTER_TARGET_PRAGMAS()			\
   do {								\
-    /* APPLE LOCAL begin mainline 2007-10-10 5497482 */		\
-    cpp_register_pragma (parse_in, NULL, "mark",		\
-			 darwin_pragma_ignore, false);		\
-    /* APPLE LOCAL end mainline 2007-10-10 5497482 */		\
+    /* APPLE LOCAL begin pragma mark 5614511 */			\
+    /* Removed mark.  */					\
+    /* APPLE LOCAL end pragma mark 5614511 */			\
     c_register_pragma (0, "options", darwin_pragma_options);	\
     c_register_pragma (0, "segment", darwin_pragma_ignore);	\
     /* APPLE LOCAL pragma fenv */                               \

Modified: llvm-gcc-4.2/trunk/libcpp/directives.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libcpp/directives.c?rev=46463&r1=46462&r2=46463&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/libcpp/directives.c (original)
+++ llvm-gcc-4.2/trunk/libcpp/directives.c Mon Jan 28 15:47:12 2008
@@ -1073,7 +1073,11 @@
       if (print_dir)
 	fprintf (stderr, "#%s ", pfile->directive->name);
       pfile->state.prevent_expansion++;
+      /* APPLE LOCAL #error with unmatched quotes 5607574 */
+      pfile->state.in_diagnostic++;
       cpp_output_line (pfile, stderr);
+      /* APPLE LOCAL #error with unmatched quotes 5607574 */
+      pfile->state.in_diagnostic--;
       pfile->state.prevent_expansion--;
     }
 }
@@ -1262,12 +1266,25 @@
     }
 }  
 
+/* APPLE LOCAL begin pragma mark 5614511 */
+/* Handle #pragma mark.  */
+static void
+do_pragma_mark (cpp_reader *pfile)
+{
+  ++pfile->state.skipping;
+  skip_rest_of_line (pfile);
+  --pfile->state.skipping;
+}
+/* APPLE LOCAL end pragma mark 5614511 */
+
 /* Register the pragmas the preprocessor itself handles.  */
 void
 _cpp_init_internal_pragmas (cpp_reader *pfile)
 {
   /* Pragmas in the global namespace.  */
   register_pragma_internal (pfile, 0, "once", do_pragma_once);
+  /* APPLE LOCAL pragma mark 5614511 */
+  register_pragma_internal (pfile, 0, "mark", do_pragma_mark);
 
   /* New GCC-specific pragmas should be put in the GCC namespace.  */
   register_pragma_internal (pfile, "GCC", "poison", do_pragma_poison);

Modified: llvm-gcc-4.2/trunk/libcpp/internal.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libcpp/internal.h?rev=46463&r1=46462&r2=46463&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/libcpp/internal.h (original)
+++ llvm-gcc-4.2/trunk/libcpp/internal.h Mon Jan 28 15:47:12 2008
@@ -226,6 +226,11 @@
 
   /* Nonzero if the deferred pragma being handled allows macro expansion.  */
   unsigned char pragma_allow_expansion;
+
+  /* APPLE LOCAL begin #error with unmatched quotes 5607574 */
+  /* Nonzero when handling #error and #warning to allow unmatched quotes.  */
+  unsigned char in_diagnostic;
+  /* APPLE LOCAL end #error with unmatched quotes 5607574 */
 };
 
 /* Special nodes - identifiers with predefined significance.  */

Modified: llvm-gcc-4.2/trunk/libcpp/lex.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libcpp/lex.c?rev=46463&r1=46462&r2=46463&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/libcpp/lex.c (original)
+++ llvm-gcc-4.2/trunk/libcpp/lex.c Mon Jan 28 15:47:12 2008
@@ -665,7 +665,12 @@
     cpp_error (pfile, CPP_DL_WARNING,
 	       "null character(s) preserved in literal");
 
-  if (type == CPP_OTHER && CPP_OPTION (pfile, lang) != CLK_ASM)
+  /* APPLE LOCAL begin #error with unmatched quotes 5607574 */
+  if (type == CPP_OTHER
+      && CPP_OPTION (pfile, lang) != CLK_ASM
+      && !pfile->state.in_diagnostic
+      && !pfile->state.skipping)
+  /* APPLE LOCAL end #error with unmatched quotes 5607574 */
     cpp_error (pfile, CPP_DL_PEDWARN, "missing terminating %c character",
 	       (int) terminator);
 





More information about the llvm-commits mailing list