diff options
author | Zak Kipling <zak@transversal.com> | 2006-09-07 06:53:21 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2006-09-07 02:53:21 -0400 |
commit | c533e34d7968ddd53f5dcdfdc580226a62da88b8 (patch) | |
tree | 8294996000e43badd6c4f6c4612d1dc1712f8576 /gcc | |
parent | b5b84a7f46e8baead0f3d7b62d59659d83d67271 (diff) | |
download | gcc-c533e34d7968ddd53f5dcdfdc580226a62da88b8.zip gcc-c533e34d7968ddd53f5dcdfdc580226a62da88b8.tar.gz gcc-c533e34d7968ddd53f5dcdfdc580226a62da88b8.tar.bz2 |
re PR c++/26195 (pragma interface no longer handles explicit names)
PR c++/26195
* decl.c (make_rtl_for_nonlocal_decl),
(start_preparsed_function): Don't use lbasename on
input_filename when calling get_fileinfo.
* semantics.c (begin_class_definition): Likewise.
* lex.c (cxx_make_type): Likewise.
(handle_pragma_interface): Call get_fileinfo on input_filename,
not on the parameter to the directive.
From-SVN: r116740
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/cp/decl.c | 4 | ||||
-rw-r--r-- | gcc/cp/lex.c | 4 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/interface2.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/interface2a.h | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/interface2b.cc | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/interface3/dir1/interface3.h | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/interface3/dir2/interface3.h | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/interface3/interface3a.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/interface3/interface3a2.cc | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/interface3/interface3b.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/interface3/interface3b2.cc | 9 |
13 files changed, 80 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9e17cce..c6da5e2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,14 @@ +2006-09-06 Zak Kipling <zak@transversal.com> + + PR c++/26195 + * decl.c (make_rtl_for_nonlocal_decl), + (start_preparsed_function): Don't use lbasename on + input_filename when calling get_fileinfo. + * semantics.c (begin_class_definition): Likewise. + * lex.c (cxx_make_type): Likewise. + (handle_pragma_interface): Call get_fileinfo on input_filename, + not on the parameter to the directive. + 2006-09-06 Mark Mitchell <mark@codesourcery.com> PR c++/28903 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 95f0695..46c1d33 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4908,7 +4908,7 @@ make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec) { /* Fool with the linkage of static consts according to #pragma interface. */ - struct c_fileinfo *finfo = get_fileinfo (lbasename (filename)); + struct c_fileinfo *finfo = get_fileinfo (filename); if (!finfo->interface_unknown && !TREE_PUBLIC (decl)) { TREE_PUBLIC (decl) = 1; @@ -10357,7 +10357,7 @@ start_preparsed_function (tree decl1, tree attrs, int flags) struct cp_binding_level *bl; tree current_function_parms; struct c_fileinfo *finfo - = get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)))); + = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))); bool honor_interface; /* Sanity check. */ diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c index 5dbaf8b..d14a1ba 100644 --- a/gcc/cp/lex.c +++ b/gcc/cp/lex.c @@ -503,7 +503,7 @@ handle_pragma_interface (cpp_reader* dfile ATTRIBUTE_UNUSED ) else filename = ggc_strdup (TREE_STRING_POINTER (fname)); - finfo = get_fileinfo (filename); + finfo = get_fileinfo (input_filename); if (impl_file_chain == 0) { @@ -809,7 +809,7 @@ cxx_make_type (enum tree_code code) /* Set up some flags that give proper default behavior. */ if (IS_AGGR_TYPE_CODE (code)) { - struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename)); + struct c_fileinfo *finfo = get_fileinfo (input_filename); SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, finfo->interface_unknown); CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only; } diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 3ec0a1a..3c72818 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2174,7 +2174,7 @@ begin_class_definition (tree t, tree attributes) before. */ if (! TYPE_ANONYMOUS_P (t)) { - struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename)); + struct c_fileinfo *finfo = get_fileinfo (input_filename); CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only; SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, finfo->interface_unknown); diff --git a/gcc/testsuite/g++.dg/ext/interface2.C b/gcc/testsuite/g++.dg/ext/interface2.C new file mode 100644 index 0000000..3b306fd --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface2.C @@ -0,0 +1,7 @@ +// PR c++/26195 +// { dg-do link } +// { dg-additional-sources "interface2b.cc" } +// { dg-options "-fno-inline" } + +#pragma implementation "interface2-imaginary.h" +#include "interface2a.h" diff --git a/gcc/testsuite/g++.dg/ext/interface2a.h b/gcc/testsuite/g++.dg/ext/interface2a.h new file mode 100644 index 0000000..efde3e2 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface2a.h @@ -0,0 +1,5 @@ +// PR c++/26195 +#pragma interface "interface2-imaginary.h" + +inline void foo1() { } +inline void foo2() { } diff --git a/gcc/testsuite/g++.dg/ext/interface2b.cc b/gcc/testsuite/g++.dg/ext/interface2b.cc new file mode 100644 index 0000000..9109949 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface2b.cc @@ -0,0 +1,9 @@ +// PR c++/26195 +extern void foo1(); +extern void foo2(); + +int main() +{ + foo1(); + foo2(); +} diff --git a/gcc/testsuite/g++.dg/ext/interface3/dir1/interface3.h b/gcc/testsuite/g++.dg/ext/interface3/dir1/interface3.h new file mode 100644 index 0000000..874be75 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface3/dir1/interface3.h @@ -0,0 +1,6 @@ +// PR c++/26195 +#pragma interface "dir1/interface3.h" +#include "../dir2/interface3.h" + +inline void f1() { } +inline void f2() { } diff --git a/gcc/testsuite/g++.dg/ext/interface3/dir2/interface3.h b/gcc/testsuite/g++.dg/ext/interface3/dir2/interface3.h new file mode 100644 index 0000000..df6f7cd --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface3/dir2/interface3.h @@ -0,0 +1,5 @@ +// PR c++/26195 +#pragma interface "dir2/interface3.h" + +inline void g1() { } +inline void g2() { } diff --git a/gcc/testsuite/g++.dg/ext/interface3/interface3a.C b/gcc/testsuite/g++.dg/ext/interface3/interface3a.C new file mode 100644 index 0000000..b324dbe --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface3/interface3a.C @@ -0,0 +1,7 @@ +// PR c++/26195 +// { dg-do link } +// { dg-additional-sources "interface3a2.cc" } +// { dg-options "-I. -fno-inline" } + +#pragma implementation "dir1/interface3.cc" +#include "dir1/interface3.h" diff --git a/gcc/testsuite/g++.dg/ext/interface3/interface3a2.cc b/gcc/testsuite/g++.dg/ext/interface3/interface3a2.cc new file mode 100644 index 0000000..cbf1ba8 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface3/interface3a2.cc @@ -0,0 +1,9 @@ +// PR c++/26195 +extern void f1(); +extern void f2(); + +int main() +{ + f1(); + f2(); +} diff --git a/gcc/testsuite/g++.dg/ext/interface3/interface3b.C b/gcc/testsuite/g++.dg/ext/interface3/interface3b.C new file mode 100644 index 0000000..03f7532 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface3/interface3b.C @@ -0,0 +1,7 @@ +// PR c++/26195 +// { dg-do link } +// { dg-additional-sources "interface3b2.cc" } +// { dg-options "-fno-inline" } + +#pragma implementation "dir2/interface3.cc" +#include "dir1/interface3.h" diff --git a/gcc/testsuite/g++.dg/ext/interface3/interface3b2.cc b/gcc/testsuite/g++.dg/ext/interface3/interface3b2.cc new file mode 100644 index 0000000..f532adc --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/interface3/interface3b2.cc @@ -0,0 +1,9 @@ +// PR c++/26195 +extern void g1(); +extern void g2(); + +int main() +{ + g1(); + g2(); +} |