Commit a3abe41c by Nathan Froyd Committed by Nathan Froyd

cppbuiltin.c (define_builtin_macros_for_type_sizes): Define __FLOAT_WORD_ORDER__…

cppbuiltin.c (define_builtin_macros_for_type_sizes): Define __FLOAT_WORD_ORDER__ according to FLOAT_WORDS_BIG_ENDIAN.

gcc/
	* cppbuiltin.c (define_builtin_macros_for_type_sizes): Define
	__FLOAT_WORD_ORDER__ according to FLOAT_WORDS_BIG_ENDIAN.
	* config/dfp-bit.h (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Delete.
	* doc/cpp.texi (__FLOAT_WORD_ORDER__): Document.
	* system.h (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Poison.

libgcc/
	* config/libbid/bid_conf.h (BID_BIG_ENDIAN): Define in terms of
	__FLOAT_WORD_ORDER__.
	* config/libbid/bid_gcc_intrinsics.h (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN):
	Delete.

libdecnumber/
	* dconfig.h (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Delete.
	(WORDS_BIG_ENDIAN): Define based on value of __FLOAT_WORD_ORDER__.

From-SVN: r167129
parent fb9041ea
2010-11-24 Nathan Froyd <froydnj@codesourcery.com>
* cppbuiltin.c (define_builtin_macros_for_type_sizes): Define
__FLOAT_WORD_ORDER__ according to FLOAT_WORDS_BIG_ENDIAN.
* config/dfp-bit.h (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Delete.
* doc/cpp.texi (__FLOAT_WORD_ORDER__): Document.
* system.h (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Poison.
2010-11-24 H.J. Lu <hongjiu.lu@intel.com>
PR target/46519
......@@ -33,11 +33,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "coretypes.h"
#include "tm.h"
#ifndef LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN \
(__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__)
#endif
#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
#endif
......
......@@ -5639,6 +5639,9 @@ extern tree cxx_omp_clause_dtor (tree, tree);
extern void cxx_omp_finish_clause (tree);
extern bool cxx_omp_privatize_by_reference (const_tree);
/* in name-lookup.c */
extern void suggest_alternatives_for (tree);
/* -- end of C++ */
#endif /* ! GCC_CP_TREE_H */
......@@ -1700,6 +1700,7 @@ dump_expr (tree t, int flags)
case NAMESPACE_DECL:
case LABEL_DECL:
case OVERLOAD:
case TYPE_DECL:
case IDENTIFIER_NODE:
dump_decl (t, (flags & ~TFF_DECL_SPECIFIERS) | TFF_NO_FUNCTION_ARGUMENTS);
break;
......
......@@ -450,7 +450,10 @@ unqualified_name_lookup_error (tree name)
else
{
if (!objc_diagnose_private_ivar (name))
error ("%qD was not declared in this scope", name);
{
error ("%qD was not declared in this scope", name);
suggest_alternatives_for (name);
}
/* Prevent repeated error messages by creating a VAR_DECL with
this NAME in the innermost block scope. */
if (current_function_decl)
......
......@@ -30,8 +30,10 @@ along with GCC; see the file COPYING3. If not see
#include "timevar.h"
#include "toplev.h"
#include "diagnostic-core.h"
#include "intl.h"
#include "debug.h"
#include "c-family/c-pragma.h"
#include "params.h"
/* The bindings for a particular name in a particular scope. */
......@@ -3917,6 +3919,73 @@ remove_hidden_names (tree fns)
return fns;
}
/* Suggest alternatives for NAME, an IDENTIFIER_NODE for which name
lookup failed. Search through all available namespaces and print out
possible candidates. */
void
suggest_alternatives_for (tree name)
{
VEC(tree,heap) *candidates = NULL;
VEC(tree,heap) *namespaces_to_search = NULL;
int max_to_search = PARAM_VALUE (CXX_MAX_NAMESPACES_FOR_DIAGNOSTIC_HELP);
int n_searched = 0;
char *spaces;
const char *str;
tree t;
unsigned ix;
VEC_safe_push (tree, heap, namespaces_to_search, global_namespace);
while (!VEC_empty (tree, namespaces_to_search)
&& n_searched < max_to_search)
{
tree scope = VEC_pop (tree, namespaces_to_search);
struct scope_binding binding = EMPTY_SCOPE_BINDING;
struct cp_binding_level *level = NAMESPACE_LEVEL (scope);
/* Look in this namespace. */
qualified_lookup_using_namespace (name, scope, &binding, 0);
n_searched++;
if (binding.value)
VEC_safe_push (tree, heap, candidates, binding.value);
/* Add child namespaces. */
for (t = level->namespaces; t; t = DECL_CHAIN (t))
VEC_safe_push (tree, heap, namespaces_to_search, t);
}
/* If we stopped before we could examine all namespaces, inform the
user. Do this even if we don't have any candidates, since there
might be more candidates further down that we weren't able to
find. */
if (n_searched >= max_to_search)
inform (input_location,
"maximum limit of %d namespaces searched for %qE",
max_to_search, name);
/* Nothing useful to report. */
if (VEC_empty (tree, candidates))
return;
str = (VEC_length(tree, candidates) > 1
? _("suggested alternatives:")
: _("suggested alternative:"));
spaces = NULL;
FOR_EACH_VEC_ELT (tree, candidates, ix, t)
{
inform (input_location, "%s %qE", (spaces ? spaces : str), t);
spaces = spaces ? spaces : get_spaces (str);
}
VEC_free (tree, heap, candidates);
VEC_free (tree, heap, namespaces_to_search);
free (spaces);
}
/* Unscoped lookup of a global: iterate over current namespaces,
considering using-directives. */
......
......@@ -157,6 +157,11 @@ define_builtin_macros_for_type_sizes (cpp_reader *pfile)
cpp_define (pfile, "__BYTE_ORDER__=__ORDER_PDP_ENDIAN__");
}
cpp_define_formatted (pfile, "__FLOAT_WORD_ORDER__=%s",
(FLOAT_WORDS_BIG_ENDIAN
? "__ORDER_BIG_ENDIAN__"
: "__ORDER_LITTLE_ENDIAN__"));
/* ptr_type_node can't be used here since ptr_mode is only set when
toplev calls backend_init which is not done with -E switch. */
cpp_define_formatted (pfile, "__SIZEOF_POINTER__=%d",
......
......@@ -2289,6 +2289,11 @@ You should use these macros for testing like this:
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
@end smallexample
@item __FLOAT_WORD_ORDER__
@code{__FLOAT_WORD_ORDER__} is defined to one of the values
@code{__ORDER_LITTLE_ENDIAN__} or @code{__ORDER_BIG_ENDIAN__} to reflect
the layout of the words of multi-word floating-point quantities.
@item __DEPRECATED
This macro is defined, with value 1, when compiling a C++ source file
with warnings about deprecated constructs enabled. These warnings are
......
......@@ -1932,7 +1932,6 @@ lto_fixup_tree (tree *tp, int *walk_subtrees, void *data)
{
/* walk_tree only handles TREE_OPERANDs. Do the rest here. */
lto_fixup_common (t, data);
LTO_FIXUP_SUBTREE (t->exp.block);
*walk_subtrees = 1;
}
else
......
......@@ -855,6 +855,15 @@ DEFPARAM (MIN_PARTITION_SIZE,
"lto-min-partition",
"Size of minimal paritition for WHOPR (in estimated instructions)",
1000, 0, 0)
/* Diagnostic parameters. */
DEFPARAM (CXX_MAX_NAMESPACES_FOR_DIAGNOSTIC_HELP,
"cxx-max-namespaces-for-diagnostic-help",
"Maximum number of namespaces to search for alternatives when "
"name lookup fails",
1000, 0, 0)
/*
Local variables:
mode:c
......
......@@ -6600,17 +6600,6 @@ choose_reload_regs (struct insn_chain *chain)
&& (rld[r].nregs == max_group_size
|| ! reg_classes_intersect_p (rld[r].rclass, group_class)))
search_equiv = rld[r].in;
/* If this is an output reload from a simple move insn, look
if an equivalence for the input is available. */
else if (inheritance && rld[r].in == 0 && rld[r].out != 0)
{
rtx set = single_set (insn);
if (set
&& rtx_equal_p (rld[r].out, SET_DEST (set))
&& CONSTANT_P (SET_SRC (set)))
search_equiv = SET_SRC (set);
}
if (search_equiv)
{
......
......@@ -800,7 +800,8 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
TARGET_HANDLE_OFAST TARGET_OPTION_OPTIMIZATION
/* Hooks into libgcc2. */
#pragma GCC poison LIBGCC2_DOUBLE_TYPE_SIZE LIBGCC2_WORDS_BIG_ENDIAN
#pragma GCC poison LIBGCC2_DOUBLE_TYPE_SIZE LIBGCC2_WORDS_BIG_ENDIAN \
LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
/* Miscellaneous macros that are no longer used. */
#pragma GCC poison USE_MAPPED_LOCATION
......
......@@ -10,4 +10,5 @@ extern "C" int printf(char*, ...);
void foo() {
printf("abc"); // { dg-error "not declared" }
// { dg-message "note" "suggested alternative" { target *-*-* } 12 }
}
......@@ -4,6 +4,7 @@
namespace N { int i; }
void foo() { i; } // { dg-error "not declared" }
// { dg-message "note" "suggested alternative" { target *-*-* } 6 }
using namespace N;
void bar() { i; }
......@@ -32,10 +32,12 @@ void g (N::A *a, M::B *b, O::C *c)
One (a); // ok
One (a, b); // ok
One (b); // { dg-error "not declared" }
// { dg-message "note" "suggested alternative" { target *-*-* } 34 }
Two (c); // ok
Two (a, c); // ok
Two (a); // { dg-error "not declared" }
// { dg-message "note" "suggested alternative" { target *-*-* } 39 }
Two (a, a); // error masked by earlier error
Two (b); // error masked by earlier error
Two (a, b); // error masked by earlier error
......@@ -43,4 +45,5 @@ void g (N::A *a, M::B *b, O::C *c)
Three (b); // ok
Three (a, b); // ok
Three (a); // { dg-error "not declared" }
// { dg-message "note" "suggested alternative" { target *-*-* } 47 }
}
......@@ -14,5 +14,6 @@ void g ()
B *bp;
N::A *ap;
f (bp); // { dg-error "not declared" }
// { dg-message "note" "suggested alternative" { target *-*-* } 16 }
f (ap);
}
......@@ -13,4 +13,5 @@ N::X X; // { dg-error "" "" }
int main()
{
return sizeof(X); // { dg-error "" "" }
// { dg-message "note" "suggested alternative" { target *-*-* } 15 }
}
......@@ -20,4 +20,5 @@ namespace std
{
template<> void
vector<int, allocator<int> >::swap(vector<int, allocator<int> >&) { } // { dg-error "" }
// { dg-message "note" "suggested alternative" { target *-*-* } 22 }
}
......@@ -4,3 +4,4 @@ namespace A {
}
int j = i; // { dg-error "" }
// { dg-message "note" "suggested alternative" { target *-*-* } 6 }
......@@ -6,4 +6,5 @@ namespace A {
namespace B {
int j = i; // { dg-error "" }
// { dg-message "note" "suggested alternative" { target *-*-* } 8 }
}
......@@ -15,4 +15,5 @@ void g()
// foo variable first, and therefore do not
// perform argument-dependent lookup.
bar(new X); // { dg-error "not declared" }
// { dg-message "note" "suggested alternative" { target *-*-* } 17 }
}
......@@ -10,4 +10,5 @@ void foo(const char*,...);
inline void
bar() {
foo("",count); // { dg-error "" } multiple overloaded count functions
// { dg-message "note" "suggested alternative" { target *-*-* } 12 }
}
......@@ -16,4 +16,5 @@ namespace tmp {
class A {
public:
int kaka(tmp::B = b); // { dg-error "" } no b in scope
// { dg-message "note" "suggested alternative" { target *-*-* } 18 }
};
2010-11-24 Nathan Froyd <froydnj@codesourcery.com>
* dconfig.h (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Delete.
(WORDS_BIG_ENDIAN): Define based on value of __FLOAT_WORD_ORDER__.
2010-10-23 Nathan Froyd <froydnj@codesourcery.com>
* dconfig.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete.
......
......@@ -28,12 +28,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "coretypes.h"
#include "tm.h"
#ifndef LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN \
(__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__)
#endif
#if LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
#if __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__
#define WORDS_BIGENDIAN 1
#endif
......
2010-11-24 Nathan Froyd <froydnj@codesourcery.com>
* config/libbid/bid_conf.h (BID_BIG_ENDIAN): Define in terms of
__FLOAT_WORD_ORDER__.
* config/libbid/bid_gcc_intrinsics.h (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN):
Delete.
2010-11-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
PR other/46202
......
......@@ -516,7 +516,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#endif
#ifndef BID_BIG_ENDIAN
#define BID_BIG_ENDIAN LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
#define BID_BIG_ENDIAN __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__
#endif
#ifndef BID_THREAD
......
......@@ -30,11 +30,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "coretypes.h"
#include "tm.h"
#ifndef LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN \
(__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__)
#endif
#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
#endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment