summaryrefslogtreecommitdiffstats
path: root/gcc/testsuite/c-c++-common/cpp
Commit message (Collapse)AuthorAgeFilesLines
* PR preprocessor/60400jakub2014-03-033-0/+20
| | | | | | | | | * c-c++-common/cpp/pr60400.c: New test. * c-c++-common/cpp/pr60400-1.h: New file. * c-c++-common/cpp/pr60400-2.h: New file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208272 138bc75d-0d04-0410-961f-82ee72b054a4
* PR preprocessor/58844jakub2014-02-192-0/+16
| | | | | | | | | | | | | * macro.c (enter_macro_context): Only push macro_real_token_count (macro) tokens rather than macro->count tokens, regardless of CPP_OPTION (pfile, track-macro-expansion). * c-c++-common/cpp/pr58844-1.c: New test. * c-c++-common/cpp/pr58844-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207871 138bc75d-0d04-0410-961f-82ee72b054a4
* Fix test c-c++-common/cpp/warning-zero-location-2.cdodji2014-01-291-1/+1
| | | | | | | | | | | gcc/testsuite/ChangeLog: * c-c++-common/cpp/warning-zero-location-2.c: Fix error message specifier. Signed-off-by: Dodji Seketeli <dodji@seketeli.org> git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207234 138bc75d-0d04-0410-961f-82ee72b054a4
* PR preprocessor/59935 - caret diagnostics crashes on non-file locationsdodji2014-01-282-0/+18
| | | | | | | | | | | | | | | | | gcc/ChangeLog * input.c (location_get_source_line): Bail out on when line number is zero, and test the return value of lookup_or_add_file_to_cache_tab. gcc/testsuite/ChangeLog * c-c++-common/cpp/warning-zero-location.c: New test. * c-c++-common/cpp/warning-zero-location-2.c: Likewise. Signed-off-by: Dodji Seketeli <dodji@seketeli.org> git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207195 138bc75d-0d04-0410-961f-82ee72b054a4
* PR preprocessor/58580 - preprocessor goes OOM with warning for zero literalsdodji2014-01-231-0/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In this problem report, the compiler is fed a (bogus) translation unit in which some literals contain bytes whose value is zero. The preprocessor detects that and proceeds to emit diagnostics for that king of bogus literals. But then when the diagnostics machinery re-reads the input file again to display the bogus literals with a caret, it attempts to calculate the length of each of the lines it got using fgets. The line length calculation is done using strlen. But that doesn't work well when the content of the line can have several zero bytes. The result is that the read_line never sees the end of the line because strlen repeatedly reports that the line ends before the end-of-line character; so read_line thinks its buffer for reading the line is too small; it thus increases the buffer, leading to a huge memory consumption and disaster. Here is what this patch does. location_get_source_line is modified to return the length of a source line that can now contain bytes with zero value. diagnostic_show_locus() is then modified to consider that a line can have characters of value zero, and so just shows a white space when instructed to display one of these characters. Additionally location_get_source_line is modified to avoid re-reading each and every line from the beginning of the file until it reaches the line number N that it is instructed to get; this was leading to annoying quadratic behaviour when reading adjacent lines near the end of (big) files. So a cache is now associated to the file opened in text mode. When the content of the file is read, that content is stashed in the file cache. That file cache is searched for line delimiters. A number of line positions are saved in the cache and a number of file caches are kept in memory. That way when location_get_source_line is asked to read line N + 1, it just has to start reading from line N that it has already read. libcpp/ChangeLog: * include/line-map.h (linemap_get_file_highest_location): Declare new function. * line-map.c (linemap_get_file_highest_location): Define it. gcc/ChangeLog: * input.h (location_get_source_line): Take an additional line_size parameter. (void diagnostics_file_cache_fini): Declare new function. * input.c (struct fcache): New type. (fcache_tab_size, fcache_buffer_size, fcache_line_record_size): New static constants. (diagnostic_file_cache_init, total_lines_num) (lookup_file_in_cache_tab, evicted_cache_tab_entry) (add_file_to_cache_tab, lookup_or_add_file_to_cache_tab) (needs_read, needs_grow, maybe_grow, read_data, maybe_read_data) (get_next_line, read_next_line, goto_next_line, read_line_num): New static function definitions. (diagnostic_file_cache_fini): New function. (location_get_source_line): Take an additional output line_len parameter. Re-write using lookup_or_add_file_to_cache_tab and read_line_num. * diagnostic.c (diagnostic_finish): Call diagnostic_file_cache_fini. (adjust_line): Take an additional input parameter for the length of the line, rather than calculating it with strlen. (diagnostic_show_locus): Adjust the use of location_get_source_line and adjust_line with respect to their new signature. While displaying a line now, do not stop at the first null byte. Rather, display the zero byte as a space and keep going until we reach the size of the line. * Makefile.in: Add vec.o to OBJS-libcommon gcc/testsuite/ChangeLog: * c-c++-common/cpp/warning-zero-in-literals-1.c: New test file. Signed-off-by: Dodji Seketeli <dodji@seketeli.org> git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@206957 138bc75d-0d04-0410-961f-82ee72b054a4
* gcc/testsuite:jsm282013-11-161-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * c-c++-common/cpp/ucnid-2011-1.c: New test. libcpp: * ucnid.tab: Add C11 and C11NOSTART data. * makeucnid.c (digit): Rename enum value to N99. (C11, N11, all_languages): New enum values. (NUM_CODE_POINTS, MAX_CODE_POINT): New macros. (flags, decomp, combining_value): Use NUM_CODE_POINTS as array size. (decomp): Use unsigned int as element type. (all_decomp): New array. (read_ucnid): Handle C11 and C11NOSTART. Use MAX_CODE_POINT. (read_table): Use MAX_CODE_POINT. Store all decompositions in all_decomp. (read_derived): Use MAX_CODE_POINT. (write_table): Use NUM_CODE_POINTS. Print N99, C11 and N11 flags. Print whole array variable declaration rather than just array contents. (char_id_valid, write_context_switch): New functions. (main): Call write_context_switch. * ucnid.h: Regenerate. * include/cpplib.h (struct cpp_options): Add c11_identifiers. * init.c (struct lang_flags): Add c11_identifiers. (cpp_set_lang): Set c11_identifiers option from selected language. * internal.h (struct normalize_state): Document "previous" as previous starter character. (NORMALIZE_STATE_UPDATE_IDNUM): Take character as argument. * charset.c (DIG): Rename enum value to N99. (C11, N11): New enum values. (struct ucnrange): Give name to struct. Use short for flags and unsigned int for end of range. Include ucnid.h for whole variable declaration. (ucn_valid_in_identifier): Allow for characters up to 0x10FFFF. Allow for C11 in determining valid characters and valid start characters. Use check_nfc for non-Hangul context-dependent checks. Only store starter characters in nst->previous. (_cpp_valid_ucn): Pass new argument to NORMALIZE_STATE_UPDATE_IDNUM. * lex.c (lex_identifier): Pass new argument to NORMALIZE_STATE_UPDATE_IDNUM. Call NORMALIZE_STATE_UPDATE_IDNUM after initial non-UCN part of identifier. (lex_number): Pass new argument to NORMALIZE_STATE_UPDATE_IDNUM. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204886 138bc75d-0d04-0410-961f-82ee72b054a4
* Revert "preprocessor/58580 - preprocessor goes OOM with warning for zero ↵dodji2013-11-061-0/+0
| | | | | | | | literals" This reverts commit fc3eff8854861fcd70d33d26095b17fe456fae31. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204490 138bc75d-0d04-0410-961f-82ee72b054a4
* preprocessor/58580 - preprocessor goes OOM with warning for zero literalsdodji2013-11-061-0/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In this problem report, the compiler is fed a (bogus) translation unit in which some literals contain bytes whose value is zero. The preprocessor detects that and proceeds to emit diagnostics for that king of bogus literals. But then when the diagnostics machinery re-reads the input file again to display the bogus literals with a caret, it attempts to calculate the length of each of the lines it got using fgets. The line length calculation is done using strlen. But that doesn't work well when the content of the line can have several zero bytes. The result is that the read_line never sees the end of the line because strlen repeatedly reports that the line ends before the end-of-line character; so read_line thinks its buffer for reading the line is too small; it thus increases the buffer, leading to a huge memory consumption, pain and disaster. The patch below introduces a new get_line function that returns the next line of a file and return the length of that line even if the line contains zero bytes. That get_line function has been adapted from the getline function from the GNU C Library because getline being a GNU extension it is not necessarily supported on all platforms. read_line is then modified to return the length of the line along with the line itself, as the line can now contain zero bytes. Callers of read_line are adjusted consequently. diagnostic_show_locus() is modified to consider that a line can have characters of value zero, and so just shows a white space when instructed to display one of these characters. gcc/ChangeLog: * input.h (location_get_source_line): Take an additional line_size parameter. * input.c (get_line): New static function definition. (read_line): Take an additional line_length output parameter to be set to the size of the line. Use the new get_line function do the actual line reading. (location_get_source_line): Take an additional output line_len parameter. Update the use of read_line to pass it the line_len parameter. * diagnostic.c (adjust_line): Take an additional input parameter for the length of the line, rather than calculating it with strlen. (diagnostic_show_locus): Adjust the use of location_get_source_line and adjust_line with respect to their new signature. While displaying a line now, do not stop at the first null byte. Rather, display the zero byte as a space and keep going until we reach the size of the line. gcc/testsuite/ChangeLog: * c-c++-common/cpp/warning-zero-in-literals-1.c: New test file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204453 138bc75d-0d04-0410-961f-82ee72b054a4
* gcc/testsuite/tschwinge2013-10-162-2/+2
| | | | | | | | | | | | | * c-c++-common/cpp/openmp-define-1.c: Move dg-require-effective-target fopenmp after dg-do directive. * c-c++-common/cpp/openmp-define-2.c: Likewise. * gfortran.dg/openmp-define-1.f90: Likewise. * gfortran.dg/openmp-define-2.f90: Likewise. * gfortran.dg/openmp-define-3.f90: Likewise. Completion of r203588, fix-up for r203417. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203697 138bc75d-0d04-0410-961f-82ee72b054a4
* [gcc/testsuite/]ktkachov2013-10-151-1/+1
| | | | | | | | | | 2013-10-15 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * c-c++-common/cpp/openmp-define-3.c: Move effective target check after other directives. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203588 138bc75d-0d04-0410-961f-82ee72b054a4
* _OPENMP pre-processor checks, openmp_version Fortran instrinsic checks.tschwinge2013-10-113-0/+24
| | | | | | | | | | | | | | | gcc/testsuite/ * c-c++-common/cpp/openmp-define-1.c: New file. * c-c++-common/cpp/openmp-define-2.c: Likewise. * c-c++-common/cpp/openmp-define-3.c: Likewise. * gfortran.dg/openmp-define-1.f90: Likewise. * gfortran.dg/openmp-define-2.f90: Likewise. * gfortran.dg/openmp-define-3.f90: Likewise. libgomp/ * testsuite/libgomp.fortran/openmp_version-1.f: New file. * testsuite/libgomp.fortran/openmp_version-2.f90: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203417 138bc75d-0d04-0410-961f-82ee72b054a4
* Implement #pragma GCC warning/errorfw2012-10-041-0/+11
| | | | | | | | | | | | | | | | | | | | | 2012-10-04 Florian Weimer <fweimer@redhat.com> * doc/cpp.texi (Pragmas): Document #pragma GCC warning, #pragma GCC error. 2012-10-04 Florian Weimer <fweimer@redhat.com> * c-c++-common/cpp/diagnostic-pragma-1.c: New testcase. 2012-10-04 Florian Weimer <fweimer@redhat.com> * directives.c (do_pragma_warning_or_error): New. (do_pragma_warning): New. (do_pragma_error): New. (_cpp_init_internal_pragmas): Register new pragmas. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@192084 138bc75d-0d04-0410-961f-82ee72b054a4
* PR preprocessor/45457jakub2010-08-311-0/+18
| | | | | | | | | | | * expr.c (parse_defined): Call pfile->cb.user_builtin_macro hook if needed. * directives.c (do_ifdef, do_ifndef): Likewise. * c-c++-common/cpp/pr45457.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163705 138bc75d-0d04-0410-961f-82ee72b054a4
* 2010-04-14 Manuel López-Ibáñez <manu@gcc.gnu.org>manu2010-04-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | PR 42966 * diagnostics.c (diagnostic_report_diagnostic): Mark specially warnings converted to errors. testsuite/ * gcc.dg/cpp/warn-undef-2.c: Update. * gcc.dg/cpp/warn-traditional-2.c: Update. * gcc.dg/cpp/warn-comments-2.c: Update. * gcc.dg/cpp/warn-variadic-2.c: Update. * gcc.dg/cpp/warn-long-long-2.c: Update. * gcc.dg/cpp/warn-deprecated-2.c: Update. * gcc.dg/cpp/warn-multichar-2.c: Update. * gcc.dg/cpp/warn-normalized-3.c: Update. * gcc.dg/cpp/warn-cxx-compat-2.c: Update. * gcc.dg/cpp/warn-trigraphs-3.c: Update. * gcc.dg/cpp/warn-unused-macros-2.c: Update. * gcc.dg/cpp/warn-trigraphs-4.c: Update. * gcc.dg/cpp/warn-redefined-2.c: Update. * gfortran.dg/warning-directive-2.F90: Update. * c-c++-common/cpp/warning-directive-2.c: Update. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158349 138bc75d-0d04-0410-961f-82ee72b054a4
* 2010-04-13 Manuel López-Ibáñez <manu@gcc.gnu.org>manu2010-04-135-0/+52
* gcc.dg/cpp/cpp.exp: Test also c-c++-common/cpp. * g++.dg/dg.exp: Likewise. * gcc.dg/cpp/warning-directive-1.c: Move to ... * c-c++-common/cpp/warning-directive-1.c: ... here. * gcc.dg/cpp/warning-directive-2.c: Move to ... * c-c++-common/cpp/warning-directive-2.c: ... here. * gcc.dg/cpp/warning-directive-3.c: Move to ... * c-c++-common/cpp/warning-directive-3.c: ... here. * gcc.dg/cpp/warning-directive-4.c: Move to ... * c-c++-common/cpp/warning-directive-4.c: ... here. * g++.dg/cpp/warning-directive-1.C: Delete. * g++.dg/cpp/warning-directive-2.C: Delete. * g++.dg/cpp/warning-directive-3.C: Delete. * g++.dg/cpp/warning-directive-4.C: Delete. * gcc.dg/cpp/normalised-3.c: Delete. * g++.dg/cpp/normalised-1.C: Rename as ... * c-c++-common/cpp/normalised-3.c: ... this. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158275 138bc75d-0d04-0410-961f-82ee72b054a4
OpenPOWER on IntegriCloud