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); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits