diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2014-05-08 14:30:56 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2014-05-08 14:30:56 +0000 |
commit | 7e422c4f04827a80a296dd080001927beea2634f (patch) | |
tree | fc80e42d7e99da2afa30b1b94c67054cc05bb884 | |
parent | add0c11114af3e58c2a64b9d34b69f38a79ef608 (diff) | |
download | gcc-7e422c4f04827a80a296dd080001927beea2634f.zip gcc-7e422c4f04827a80a296dd080001927beea2634f.tar.gz gcc-7e422c4f04827a80a296dd080001927beea2634f.tar.bz2 |
re PR c++/13981 (Give message about incomplete class that might be implicitly upcasted.)
/cp
2014-05-08 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/13981
* typeck.c (convert_for_assignment): Provide an inform for pointers
to incomplete class types.
/testsuite
2014-05-08 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/13981
* g++.dg/diagnostic/pr13981.C: New.
From-SVN: r210217
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/diagnostic/pr13981.C | 12 |
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8a7f18c..3d400bb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-05-08 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/13981 + * typeck.c (convert_for_assignment): Provide an inform for pointers + to incomplete class types. + 2014-05-07 Paolo Carlini <paolo.carlini@oracle.com> PR c++/61083 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 7b28a9a..b933b96 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -8094,6 +8094,14 @@ convert_for_assignment (tree type, tree rhs, default: gcc_unreachable(); } + if (TYPE_PTR_P (rhstype) + && TYPE_PTR_P (type) + && CLASS_TYPE_P (TREE_TYPE (rhstype)) + && CLASS_TYPE_P (TREE_TYPE (type)) + && !COMPLETE_TYPE_P (TREE_TYPE (rhstype))) + inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL + (TREE_TYPE (rhstype))), + "class type %qT is incomplete", TREE_TYPE (rhstype)); } return error_mark_node; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ad7a652..ffbec5d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-05-08 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/13981 + * g++.dg/diagnostic/pr13981.C: New. + 2014-05-08 Marc Glisse <marc.glisse@inria.fr> PR tree-optimization/59100 diff --git a/gcc/testsuite/g++.dg/diagnostic/pr13981.C b/gcc/testsuite/g++.dg/diagnostic/pr13981.C new file mode 100644 index 0000000..1b8a028 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/pr13981.C @@ -0,0 +1,12 @@ +// PR c++/13981 + +struct A {}; +struct B; // { dg-message "is incomplete" } + +void func( A *a ); + +int main() +{ + B *b = 0; + func(b); // { dg-error "cannot convert" } +} |