diff options
author | Jason Merrill <jason@redhat.com> | 2011-02-20 23:18:11 +0000 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2011-02-20 23:18:11 +0000 |
commit | 10fe048ba635919cba3e33bb5d05283555732409 (patch) | |
tree | d82f0c11743b49ec053fa200217217430b85b57b | |
parent | 18d529e0f307a80d9060ff8bd9123ff2a65c9d6d (diff) |
PR c++/47703
* error.c (location_of): Handle non-tagged types.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@170349 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/error.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/overload/conv-op1.C | 17 |
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b867ef327bc..848765d2f92 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-02-20 Jason Merrill <jason@redhat.com> + PR c++/47703 + * error.c (location_of): Handle non-tagged types. + PR c++/46472 * method.c (process_subob_fn): Instantiate constexpr templates. * optimize.c (maybe_clone_body): Propagate DECL_DECLARED_CONSTEXPR_P. diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 3e91115ba9d..28305d22244 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -2493,7 +2493,11 @@ location_of (tree t) if (TREE_CODE (t) == PARM_DECL && DECL_CONTEXT (t)) t = DECL_CONTEXT (t); else if (TYPE_P (t)) - t = TYPE_MAIN_DECL (t); + { + t = TYPE_MAIN_DECL (t); + if (t == NULL_TREE) + return input_location; + } else if (TREE_CODE (t) == OVERLOAD) t = OVL_FUNCTION (t); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9eff5ffcd2f..91ef5f18d8c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2011-02-20 Jason Merrill <jason@redhat.com> + * g++.dg/overload/conv-op1.C: New. + * g++.dg/cpp0x/constexpr-synth1.C: New. 2011-02-20 Nicola Pero <nicola.pero@meta-innovation.com> diff --git a/gcc/testsuite/g++.dg/overload/conv-op1.C b/gcc/testsuite/g++.dg/overload/conv-op1.C new file mode 100644 index 00000000000..6a63cbaeb87 --- /dev/null +++ b/gcc/testsuite/g++.dg/overload/conv-op1.C @@ -0,0 +1,17 @@ +// PR c++/47703 + +typedef void (*pfn)(int &); + +struct A +{ + operator pfn() { return 0; } +}; + +void f() +{ + const int i = 42; + A()(i); // { dg-message "<conversion>" } +} + +// { dg-prune-output "no match" } +// { dg-prune-output "candidate" } |