mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
re PR preprocessor/36649 (-H option doesn't work as expected)
PR preprocessor/36649 * files.c (struct report_missing_guard_data): New type. (report_missing_guard): Put paths into an array instead of printing them right away. Return 1 rather than 0. (report_missing_guard_cmp): New function. (_cpp_report_missing_guards): Sort and print paths gathered by report_missing_guard callback. * gcc.dg/pch/cpp-3.hs: Add include guards. * gcc.dg/pch/cpp-3a.h: Likewise. * gcc.dg/pch/cpp-3b.h: Likewise. * gcc.dg/cpp/mi8.c: New test. * gcc.dg/cpp/mi8a.h: New file. * gcc.dg/cpp/mi8b.h: New file. * gcc.dg/cpp/mi8c.h: New file. * gcc.dg/cpp/mi8d.h: New file. From-SVN: r138432
This commit is contained in:
parent
a23eb008dc
commit
affa55c67f
@ -1,5 +1,15 @@
|
||||
2008-07-31 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR preprocessor/36649
|
||||
* gcc.dg/pch/cpp-3.hs: Add include guards.
|
||||
* gcc.dg/pch/cpp-3a.h: Likewise.
|
||||
* gcc.dg/pch/cpp-3b.h: Likewise.
|
||||
* gcc.dg/cpp/mi8.c: New test.
|
||||
* gcc.dg/cpp/mi8a.h: New file.
|
||||
* gcc.dg/cpp/mi8b.h: New file.
|
||||
* gcc.dg/cpp/mi8c.h: New file.
|
||||
* gcc.dg/cpp/mi8d.h: New file.
|
||||
|
||||
PR rtl-optimization/36419
|
||||
* g++.dg/eh/async-unwind2.C: New test.
|
||||
|
||||
|
8
gcc/testsuite/gcc.dg/cpp/mi8.c
Normal file
8
gcc/testsuite/gcc.dg/cpp/mi8.c
Normal file
@ -0,0 +1,8 @@
|
||||
/* Test multiple include guards suggestions. */
|
||||
|
||||
/* { dg-do preprocess }
|
||||
{ dg-options "-H" }
|
||||
{ dg-message "mi8a\.h\n\[^\n\]*mi8c\.h\n\[^\n\]*mi8b\.h\n\[^\n\]*mi8d\.h\nMultiple include guards may be useful for:\n\[^\n\]*mi8a\.h\n\[^\n\]*mi8d\.h\n" "" { target *-*-* } 0 } */
|
||||
|
||||
#include "mi8a.h"
|
||||
#include "mi8b.h"
|
1
gcc/testsuite/gcc.dg/cpp/mi8a.h
Normal file
1
gcc/testsuite/gcc.dg/cpp/mi8a.h
Normal file
@ -0,0 +1 @@
|
||||
#include "mi8c.h"
|
4
gcc/testsuite/gcc.dg/cpp/mi8b.h
Normal file
4
gcc/testsuite/gcc.dg/cpp/mi8b.h
Normal file
@ -0,0 +1,4 @@
|
||||
#ifndef GUARDB
|
||||
#define GUARDB
|
||||
#include "mi8d.h"
|
||||
#endif
|
4
gcc/testsuite/gcc.dg/cpp/mi8c.h
Normal file
4
gcc/testsuite/gcc.dg/cpp/mi8c.h
Normal file
@ -0,0 +1,4 @@
|
||||
#ifndef GUARDC
|
||||
#define GUARDC
|
||||
/* Empty */
|
||||
#endif
|
1
gcc/testsuite/gcc.dg/cpp/mi8d.h
Normal file
1
gcc/testsuite/gcc.dg/cpp/mi8d.h
Normal file
@ -0,0 +1 @@
|
||||
/* Empty */
|
@ -1 +1,4 @@
|
||||
#ifndef CPP_3_H
|
||||
#define CPP_3_H
|
||||
/* empty */
|
||||
#endif
|
||||
|
@ -1 +1,4 @@
|
||||
#ifndef CPP_3A_H
|
||||
#define CPP_3A_H
|
||||
#include "cpp-3b.h"
|
||||
#endif
|
||||
|
@ -1 +1,4 @@
|
||||
#ifndef CPP_3B_H
|
||||
#define CPP_3B_H
|
||||
/* empty */
|
||||
#endif
|
||||
|
@ -1,3 +1,13 @@
|
||||
2008-07-31 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR preprocessor/36649
|
||||
* files.c (struct report_missing_guard_data): New type.
|
||||
(report_missing_guard): Put paths into an array instead of printing
|
||||
them right away. Return 1 rather than 0.
|
||||
(report_missing_guard_cmp): New function.
|
||||
(_cpp_report_missing_guards): Sort and print paths gathered by
|
||||
report_missing_guard callback.
|
||||
|
||||
2008-07-22 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
|
||||
|
||||
PR 28079
|
||||
|
@ -1221,12 +1221,19 @@ cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
|
||||
_cpp_do_file_change (pfile, reason, new_name, 1, 0);
|
||||
}
|
||||
|
||||
struct report_missing_guard_data
|
||||
{
|
||||
const char **paths;
|
||||
size_t count;
|
||||
};
|
||||
|
||||
/* Callback function for htab_traverse. */
|
||||
static int
|
||||
report_missing_guard (void **slot, void *b)
|
||||
report_missing_guard (void **slot, void *d)
|
||||
{
|
||||
struct file_hash_entry *entry = (struct file_hash_entry *) *slot;
|
||||
int *bannerp = (int *) b;
|
||||
struct report_missing_guard_data *data
|
||||
= (struct report_missing_guard_data *) d;
|
||||
|
||||
/* Skip directories. */
|
||||
if (entry->start_dir != NULL)
|
||||
@ -1236,19 +1243,25 @@ report_missing_guard (void **slot, void *b)
|
||||
/* We don't want MI guard advice for the main file. */
|
||||
if (file->cmacro == NULL && file->stack_count == 1 && !file->main_file)
|
||||
{
|
||||
if (*bannerp == 0)
|
||||
if (data->paths == NULL)
|
||||
{
|
||||
fputs (_("Multiple include guards may be useful for:\n"),
|
||||
stderr);
|
||||
*bannerp = 1;
|
||||
data->paths = XCNEWVEC (const char *, data->count);
|
||||
data->count = 0;
|
||||
}
|
||||
|
||||
fputs (entry->u.file->path, stderr);
|
||||
putc ('\n', stderr);
|
||||
data->paths[data->count++] = file->path;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
/* Keep traversing the hash table. */
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Comparison function for qsort. */
|
||||
static int
|
||||
report_missing_guard_cmp (const void *p1, const void *p2)
|
||||
{
|
||||
return strcmp (*(const char *const *) p1, *(const char *const *) p2);
|
||||
}
|
||||
|
||||
/* Report on all files that might benefit from a multiple include guard.
|
||||
@ -1256,9 +1269,29 @@ report_missing_guard (void **slot, void *b)
|
||||
void
|
||||
_cpp_report_missing_guards (cpp_reader *pfile)
|
||||
{
|
||||
int banner = 0;
|
||||
struct report_missing_guard_data data;
|
||||
|
||||
htab_traverse (pfile->file_hash, report_missing_guard, &banner);
|
||||
data.paths = NULL;
|
||||
data.count = htab_elements (pfile->file_hash);
|
||||
htab_traverse (pfile->file_hash, report_missing_guard, &data);
|
||||
|
||||
if (data.paths != NULL)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
/* Sort the paths to avoid outputting them in hash table
|
||||
order. */
|
||||
qsort (data.paths, data.count, sizeof (const char *),
|
||||
report_missing_guard_cmp);
|
||||
fputs (_("Multiple include guards may be useful for:\n"),
|
||||
stderr);
|
||||
for (i = 0; i < data.count; i++)
|
||||
{
|
||||
fputs (data.paths[i], stderr);
|
||||
putc ('\n', stderr);
|
||||
}
|
||||
free (data.paths);
|
||||
}
|
||||
}
|
||||
|
||||
/* Locate HEADER, and determine whether it is newer than the current
|
||||
|
Loading…
Reference in New Issue
Block a user