Message ID | 20101209151743.GH25904@nightcrawler |
---|---|
State | New |
Headers | show |
On 12/09/2010 10:17 AM, Nathan Froyd wrote: > - if (DECL_CONTEXT (fndecl) > + if (!DECL_FILE_SCOPE_P (fndecl) > && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL) > error ("%qD is already defined in class %qT", fndecl, > DECL_CONTEXT (fndecl)); Let's just check DECL_CLASS_SCOPE_P. > - else if (DECL_CONTEXT (t)) > + else if (DECL_FILE_SCOPE_P (t)) > + dump_decl (DECL_NAME (t), flags); > + else > { > dump_decl (DECL_CONTEXT (t), flags); > pp_cxx_colon_colon (cxx_pp); > } > - dump_decl (DECL_NAME (t), flags); > break; This change breaks printing the name of the decl if it's in a namespace. Just change the if (DECL_CONTEXT to if (!DECL_FILE_SCOPE_P. Jason
On Thu, Dec 09, 2010 at 04:39:57PM -0500, Jason Merrill wrote: > On 12/09/2010 10:17 AM, Nathan Froyd wrote: > >- if (DECL_CONTEXT (fndecl) > >+ if (!DECL_FILE_SCOPE_P (fndecl) > > && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL) > > error ("%qD is already defined in class %qT", fndecl, > > DECL_CONTEXT (fndecl)); > > Let's just check DECL_CLASS_SCOPE_P. For avoidance of doubt, DECL_CLASS_SCOPE_P is now the complete condition--the NAMESPACE_DECL check goes away? > >- else if (DECL_CONTEXT (t)) > >+ else if (DECL_FILE_SCOPE_P (t)) > >+ dump_decl (DECL_NAME (t), flags); > >+ else > > { > > dump_decl (DECL_CONTEXT (t), flags); > > pp_cxx_colon_colon (cxx_pp); > > } > >- dump_decl (DECL_NAME (t), flags); > > break; > > This change breaks printing the name of the decl if it's in a > namespace. Just change the if (DECL_CONTEXT to if > (!DECL_FILE_SCOPE_P. Doh. Will fix. -Nathan
On 12/09/2010 04:44 PM, Nathan Froyd wrote: > On Thu, Dec 09, 2010 at 04:39:57PM -0500, Jason Merrill wrote: >> On 12/09/2010 10:17 AM, Nathan Froyd wrote: >>> - if (DECL_CONTEXT (fndecl) >>> + if (!DECL_FILE_SCOPE_P (fndecl) >>> && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL) >>> error ("%qD is already defined in class %qT", fndecl, >>> DECL_CONTEXT (fndecl)); >> >> Let's just check DECL_CLASS_SCOPE_P. > > For avoidance of doubt, DECL_CLASS_SCOPE_P is now the complete > condition--the NAMESPACE_DECL check goes away? Yes. Jason
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b72b588..5735d4e 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -13098,7 +13098,7 @@ grokmethod (cp_decl_specifier_seq *declspecs, if (DECL_IN_AGGR_P (fndecl)) { - if (DECL_CONTEXT (fndecl) + if (!DECL_FILE_SCOPE_P (fndecl) && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL) error ("%qD is already defined in class %qT", fndecl, DECL_CONTEXT (fndecl)); diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 4fb47dc..f45f1c2 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1027,12 +1027,13 @@ dump_decl (tree t, int flags) dump_type (DECL_CONTEXT (t), flags); pp_cxx_colon_colon (cxx_pp); } - else if (DECL_CONTEXT (t)) + else if (DECL_FILE_SCOPE_P (t)) + dump_decl (DECL_NAME (t), flags); + else { dump_decl (DECL_CONTEXT (t), flags); pp_cxx_colon_colon (cxx_pp); } - dump_decl (DECL_NAME (t), flags); break; }