diff options
author | Richard Stallman <rms@gnu.org> | 1992-08-25 21:25:20 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-08-25 21:25:20 +0000 |
commit | 789d0ee5158112e6d6508cb2eaf6eda15dd5b836 (patch) | |
tree | aaab2c13fbfcc0b5ae109b1bbd79968bedea2fd2 /gcc | |
parent | bee757e1c0f2594df8f8eb619ba0bdbaa79877c3 (diff) | |
download | gcc-789d0ee5158112e6d6508cb2eaf6eda15dd5b836.zip gcc-789d0ee5158112e6d6508cb2eaf6eda15dd5b836.tar.gz gcc-789d0ee5158112e6d6508cb2eaf6eda15dd5b836.tar.bz2 |
(do_pragma): Warn if `#pragma implementation "foo.h"' is
invoked after "foo.h" has been included.
From-SVN: r1953
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cccp.c | 25 |
1 files changed, 24 insertions, 1 deletions
@@ -5867,7 +5867,7 @@ do_ident (buf, limit) } /* #pragma and its argument line have already been copied to the output file. - Here just check for recognized pragmas. */ + Just check for some recognized pragmas that need validation here. */ static int do_pragma (buf, limit) @@ -5882,6 +5882,29 @@ do_pragma (buf, limit) warning ("`#pragma once' is obsolete"); do_once (); } + + if (!strncmp (buf, "implementation", 14)) { + /* Be quiet about `#pragma implementation' for a file only if it hasn't + been included yet. */ + struct file_name_list *ptr; + char *p = buf + 14, *fname, *inc_fname; + SKIP_WHITE_SPACE (p); + if (*p == '\n' || *p != '\"') + return 0; + + fname = p + 1; + if (p = (char *) strchr (fname, '\"')) + *p = '\0'; + + for (ptr = all_include_files; ptr; ptr = ptr->next) { + inc_fname = (char *) strrchr (ptr->fname, '/'); + inc_fname = inc_fname ? inc_fname + 1 : ptr->fname; + if (inc_fname && !strcmp (inc_fname, fname)) + warning ("`#pragma implementation' for \"%s\" appears after its #include", + fname); + } + } + return 0; } |