From f3e0be564cdbf3b60e7cc9963269f3d86c0ef796 Mon Sep 17 00:00:00 2001 From: jason Date: Fri, 27 Mar 2015 16:36:32 +0000 Subject: [PATCH] PR c++/65509 * decl.c (make_rtl_for_nonlocal_decl): Don't defer static constants. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@221737 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 +++++ gcc/cp/decl.c | 30 +++---------------------- gcc/testsuite/g++.dg/cpp0x/constexpr-ptrcomp1.C | 8 +++++++ 3 files changed, 17 insertions(+), 27 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-ptrcomp1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 684129b2200..baed6e14732 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2015-03-27 Jason Merrill + + PR c++/65509 + * decl.c (make_rtl_for_nonlocal_decl): Don't defer static + constants. + 2015-03-26 Mikhail Maltsev PR c++/65154 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index cb0f11f5749..f05aefaddfb 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -6061,7 +6061,6 @@ make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec) { int toplev = toplevel_bindings_p (); int defer_p; - const char *filename; /* Set the DECL_ASSEMBLER_NAME for the object. */ if (asmspec) @@ -6109,32 +6108,9 @@ make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec) DECL_EXPR is expanded. */ defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl); - /* We try to defer namespace-scope static constants so that they are - not emitted into the object file unnecessarily. */ - filename = LOCATION_FILE (input_location); - if (!DECL_VIRTUAL_P (decl) - && TREE_READONLY (decl) - && DECL_INITIAL (decl) != NULL_TREE - && DECL_INITIAL (decl) != error_mark_node - && filename != NULL - && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)) - && toplev - && !TREE_PUBLIC (decl)) - { - /* Fool with the linkage of static consts according to #pragma - interface. */ - struct c_fileinfo *finfo = get_fileinfo (filename); - if (!finfo->interface_unknown && !TREE_PUBLIC (decl)) - { - TREE_PUBLIC (decl) = 1; - DECL_EXTERNAL (decl) = finfo->interface_only; - } - - defer_p = 1; - } - /* Likewise for template instantiations. */ - else if (DECL_LANG_SPECIFIC (decl) - && DECL_IMPLICIT_INSTANTIATION (decl)) + /* Defer template instantiations. */ + if (DECL_LANG_SPECIFIC (decl) + && DECL_IMPLICIT_INSTANTIATION (decl)) defer_p = 1; /* If we're not deferring, go ahead and assemble the variable. */ diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrcomp1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrcomp1.C new file mode 100644 index 00000000000..2eee1b022e3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrcomp1.C @@ -0,0 +1,8 @@ +// PR c++/65509 +// { dg-do compile { target c++11 } } + +const int i1 = 1; +const int i2 = 2; + +#define SA(X) static_assert (X,#X) +SA(&i1 != &i2); -- 2.11.4.GIT