re PR c++/65509 ([C++11] GCC rejects operator== with two distinct pointers as not constexpr)
PR c++/65509 * decl.c (make_rtl_for_nonlocal_decl): Don't defer static constants. From-SVN: r221737
This commit is contained in:
parent
6e85fbaadd
commit
0b7dccc63e
|
@ -1,3 +1,9 @@
|
|||
2015-03-27 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/65509
|
||||
* decl.c (make_rtl_for_nonlocal_decl): Don't defer static
|
||||
constants.
|
||||
|
||||
2015-03-26 Mikhail Maltsev <maltsevm@gmail.com>
|
||||
|
||||
PR c++/65154
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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);
|
Loading…
Reference in New Issue