summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-03 20:39:50 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-03 20:39:50 +0000
commit7442ab85beb06c8b9a42c2922fbda17df4ef6b10 (patch)
tree7331696da48633cf3a8a6c997f9ca5e328abaad5
parent53c5ddd22962715e95fa5b661b67b32a58b581b4 (diff)
downloadgcc-7442ab85beb06c8b9a42c2922fbda17df4ef6b10.tar.gz
/gcc/cp
2013-06-03 Paolo Carlini <paolo.carlini@oracle.com> PR c++/57419 * decl2.c (mark_used): Add overload taking a tsubst_flags_t too. * semantics.c (finish_qualified_id_expr): Use it. * cp-tree.h: Update. /gcc/testsuite 2013-06-03 Paolo Carlini <paolo.carlini@oracle.com> PR c++/57419 * g++.dg/cpp0x/sfinae46.C: New. * g++.dg/cpp0x/defaulted13.C: Adjust. * g++.dg/cpp0x/defaulted2.C: Likewise. * g++.dg/cpp0x/defaulted26.C: Likewise. * g++.dg/cpp0x/defaulted3.C: Likewise. * g++.dg/cpp0x/error1.C: Likewise. * g++.dg/cpp0x/implicit1.C: Likewise. * g++.dg/cpp0x/implicit11.C: Likewise. * g++.dg/cpp0x/inh-ctor13.C: Likewise. * g++.dg/cpp0x/initlist47.C: Likewise. * g++.dg/cpp0x/initlist9.C: Likewise. * g++.dg/cpp0x/lambda/lambda-errloc.C: Likewise. * g++.dg/cpp0x/lambda/lambda-errloc2.C: Likewise. * g++.dg/cpp0x/nsdmi-local.C: Likewise. * g++.dg/cpp0x/union4.C: Likewise. * g++.dg/template/crash108.C: Likewise. * g++.dg/template/crash41.C: Likewise. * g++.old-deja/g++.jason/local.C: Likewise. * g++.old-deja/g++.law/visibility3.C: Likewise. /libstdc++-v3 2013-06-03 Paolo Carlini <paolo.carlini@oracle.com> PR c++/57419 * testsuite/20_util/default_delete/48631_neg.cc: Adjust. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@199626 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/cp-tree.h1
-rw-r--r--gcc/cp/decl2.c20
-rw-r--r--gcc/cp/semantics.c5
-rw-r--r--gcc/testsuite/ChangeLog23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted13.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted26.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted3.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/error1.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit1.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit11.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inh-ctor13.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist47.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist9.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae46.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/union4.C2
-rw-r--r--gcc/testsuite/g++.dg/template/crash108.C2
-rw-r--r--gcc/testsuite/g++.dg/template/crash41.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.jason/local.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/visibility3.C2
-rw-r--r--libstdc++-v3/ChangeLog12
-rw-r--r--libstdc++-v3/testsuite/20_util/default_delete/48631_neg.cc2
26 files changed, 91 insertions, 30 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8dc30f986c5..a30a7d63476 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2013-06-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/57419
+ * decl2.c (mark_used): Add overload taking a tsubst_flags_t too.
+ * semantics.c (finish_qualified_id_expr): Use it.
+ * cp-tree.h: Update.
+
2013-06-01 Jan Hubicka <jh@suse.cz>
* decl2.c (cp_write_global_declarations): Replace same_body_alias
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index aebc440a427..8be1077c99c 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -5278,6 +5278,7 @@ extern bool decl_constant_var_p (tree);
extern bool decl_maybe_constant_var_p (tree);
extern void check_default_args (tree);
extern bool mark_used (tree);
+extern bool mark_used (tree, tsubst_flags_t);
extern void finish_static_data_member_decl (tree, tree, bool, tree, int);
extern tree cp_build_parm_decl (tree, tree);
extern tree get_guard (tree);
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 3fe234e6f09..5e7dbcdb359 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -4499,7 +4499,7 @@ possibly_inlined_p (tree decl)
wrong, true otherwise. */
bool
-mark_used (tree decl)
+mark_used (tree decl, tsubst_flags_t complain)
{
/* If DECL is a BASELINK for a single function, then treat it just
like the DECL for the function. Otherwise, if the BASELINK is
@@ -4537,9 +4537,12 @@ mark_used (tree decl)
return false;
}
}
- error ("use of deleted function %qD", decl);
- if (!maybe_explain_implicit_delete (decl))
- error_at (DECL_SOURCE_LOCATION (decl), "declared here");
+ if (complain & tf_error)
+ {
+ error ("use of deleted function %qD", decl);
+ if (!maybe_explain_implicit_delete (decl))
+ inform (DECL_SOURCE_LOCATION (decl), "declared here");
+ }
return false;
}
@@ -4552,7 +4555,8 @@ mark_used (tree decl)
{
if (!processing_template_decl && type_uses_auto (TREE_TYPE (decl)))
{
- error ("use of %qD before deduction of %<auto%>", decl);
+ if (complain & tf_error)
+ error ("use of %qD before deduction of %<auto%>", decl);
return false;
}
return true;
@@ -4701,4 +4705,10 @@ mark_used (tree decl)
return true;
}
+bool
+mark_used (tree decl)
+{
+ return mark_used (decl, tf_warning_or_error);
+}
+
#include "gt-cp-decl2.h"
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index c1385c10b60..048a7db5e1e 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -1778,8 +1778,9 @@ finish_qualified_id_expr (tree qualifying_class,
if (error_operand_p (expr))
return error_mark_node;
- if (DECL_P (expr) || BASELINK_P (expr))
- mark_used (expr);
+ if ((DECL_P (expr) || BASELINK_P (expr))
+ && !mark_used (expr, complain))
+ return error_mark_node;
if (template_p)
check_template_keyword (expr);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 54f0fa2fbe2..a1f082790c9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,26 @@
+2013-06-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/57419
+ * g++.dg/cpp0x/sfinae46.C: New.
+ * g++.dg/cpp0x/defaulted13.C: Adjust.
+ * g++.dg/cpp0x/defaulted2.C: Likewise.
+ * g++.dg/cpp0x/defaulted26.C: Likewise.
+ * g++.dg/cpp0x/defaulted3.C: Likewise.
+ * g++.dg/cpp0x/error1.C: Likewise.
+ * g++.dg/cpp0x/implicit1.C: Likewise.
+ * g++.dg/cpp0x/implicit11.C: Likewise.
+ * g++.dg/cpp0x/inh-ctor13.C: Likewise.
+ * g++.dg/cpp0x/initlist47.C: Likewise.
+ * g++.dg/cpp0x/initlist9.C: Likewise.
+ * g++.dg/cpp0x/lambda/lambda-errloc.C: Likewise.
+ * g++.dg/cpp0x/lambda/lambda-errloc2.C: Likewise.
+ * g++.dg/cpp0x/nsdmi-local.C: Likewise.
+ * g++.dg/cpp0x/union4.C: Likewise.
+ * g++.dg/template/crash108.C: Likewise.
+ * g++.dg/template/crash41.C: Likewise.
+ * g++.old-deja/g++.jason/local.C: Likewise.
+ * g++.old-deja/g++.law/visibility3.C: Likewise.
+
2013-06-03 Teresa Johnson <tejohnson@google.com>
* gcc.dg/vect/bb-slp-31.c: Update vect dump message.
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted13.C b/gcc/testsuite/g++.dg/cpp0x/defaulted13.C
index 8b23579217e..5ddbcb38c1c 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted13.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted13.C
@@ -7,13 +7,13 @@ struct NonCopyable {
};
template<>
-NonCopyable<int>::NonCopyable(NonCopyable<int> const&) = delete; // { dg-error "declared" }
+NonCopyable<int>::NonCopyable(NonCopyable<int> const&) = delete; // { dg-message "declared" }
template<typename T>
NonCopyable<T>::NonCopyable(NonCopyable<T> const&) = default;
template<>
-NonCopyable<double>::NonCopyable(NonCopyable<double> const&) = delete; // { dg-error "declared" }
+NonCopyable<double>::NonCopyable(NonCopyable<double> const&) = delete; // { dg-message "declared" }
int main()
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted2.C b/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
index e3aac8f1a9f..ce551a3fee2 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
@@ -42,7 +42,7 @@ struct E
struct F
{
F() = default;
- F(const F&) = delete; // { dg-error "declared" }
+ F(const F&) = delete; // { dg-message "declared" }
};
struct G
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted26.C b/gcc/testsuite/g++.dg/cpp0x/defaulted26.C
index 69bd0accbd4..746fa908180 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted26.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted26.C
@@ -1,7 +1,7 @@
// PR c++/49066
// { dg-options -std=c++0x }
-void foo() = delete; // { dg-error "declared here" }
+void foo() = delete; // { dg-message "declared here" }
void foo();
int main() { foo(); } // { dg-error "deleted" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted3.C b/gcc/testsuite/g++.dg/cpp0x/defaulted3.C
index 5e2116b53b3..bc5b14d2d59 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted3.C
@@ -4,7 +4,7 @@
template<class T>
struct A {
template<class U>
- bool operator==(const A<U>&) = delete; // { dg-error "declared" }
+ bool operator==(const A<U>&) = delete; // { dg-message "declared" }
operator bool () { return true; }
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/error1.C b/gcc/testsuite/g++.dg/cpp0x/error1.C
index 751b3b75e0c..15cd38f8807 100644
--- a/gcc/testsuite/g++.dg/cpp0x/error1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/error1.C
@@ -2,7 +2,7 @@
// { dg-do compile }
// { dg-options "-std=c++0x" }
-template<int... N> void foo (int... x[N]) // { dg-error "int \\\[N\\\]\\.\\.\\. x" }
+template<int... N> void foo (int... x[N]) // { dg-message "int \\\[N\\\]\\.\\.\\. x" }
{
struct A
{
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit1.C b/gcc/testsuite/g++.dg/cpp0x/implicit1.C
index 2efbde6a93a..e4e16e1ad35 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit1.C
@@ -15,7 +15,7 @@ D d; // { dg-error "deleted" }
struct E
{
- ~E() = delete; // { dg-error "declared here" }
+ ~E() = delete; // { dg-message "declared here" }
};
struct F
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit11.C b/gcc/testsuite/g++.dg/cpp0x/implicit11.C
index 7ec8e95dcb6..c974e2b7761 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit11.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit11.C
@@ -4,7 +4,7 @@
struct A
{
- ~A() = delete; // { dg-error "declared here" }
+ ~A() = delete; // { dg-message "declared here" }
};
struct B: A { }; // { dg-error "deleted" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/inh-ctor13.C b/gcc/testsuite/g++.dg/cpp0x/inh-ctor13.C
index 2e18e5d62f3..95cf932d001 100644
--- a/gcc/testsuite/g++.dg/cpp0x/inh-ctor13.C
+++ b/gcc/testsuite/g++.dg/cpp0x/inh-ctor13.C
@@ -8,7 +8,7 @@ struct A
struct C
{
- C() = delete; // { dg-error "declared here" }
+ C() = delete; // { dg-message "declared here" }
};
struct B: A, C
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist47.C b/gcc/testsuite/g++.dg/cpp0x/initlist47.C
index b76fb58361f..06d683e038a 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist47.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist47.C
@@ -1,6 +1,6 @@
// { dg-options -std=c++0x }
-struct A { ~A() = delete; }; // { dg-error "declared" }
+struct A { ~A() = delete; }; // { dg-message "declared" }
int main()
{
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist9.C b/gcc/testsuite/g++.dg/cpp0x/initlist9.C
index d596b391508..197fdd4ad04 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist9.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist9.C
@@ -8,7 +8,7 @@ struct b
b() = default;
~b() = default;
b& operator=(const b&) = delete;
- b(const b&) = delete; // { dg-error "declared" }
+ b(const b&) = delete; // { dg-message "declared" }
b(bool _t): t (_t) { }
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C
index f4766691eec..92c54313874 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C
@@ -5,7 +5,7 @@
struct A
{
A();
- A(const A& a) = delete; // { dg-error "declared" }
+ A(const A& a) = delete; // { dg-message "declared" }
};
int main()
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C
index f94d64ec0ea..213f7c0babf 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C
@@ -3,7 +3,7 @@
struct A {
A();
- A(const A&) = delete; // { dg-error "declared" }
+ A(const A&) = delete; // { dg-message "declared" }
};
template <class T>
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
index 9b84c8c3ded..2330365f7ce 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
@@ -3,6 +3,6 @@
int main()
{
- int q = 1; // { dg-error "declared here" }
+ int q = 1; // { dg-message "declared here" }
struct test { int x = q; } instance; // { dg-error "local variable" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae46.C b/gcc/testsuite/g++.dg/cpp0x/sfinae46.C
new file mode 100644
index 00000000000..20e859c23ee
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae46.C
@@ -0,0 +1,13 @@
+// PR c++/57419
+// { dg-do compile { target c++11 } }
+
+template< typename q >
+decltype( &q::f ) t( q ) {}
+
+char t( ... ) { return {}; }
+
+class c { void f() = delete; };
+class d { static void f() = delete; };
+
+static_assert( sizeof( t( c() ) ), "c" );
+static_assert( sizeof( t( d() ) ), "d" );
diff --git a/gcc/testsuite/g++.dg/cpp0x/union4.C b/gcc/testsuite/g++.dg/cpp0x/union4.C
index 07050475d36..c82a81cdba8 100644
--- a/gcc/testsuite/g++.dg/cpp0x/union4.C
+++ b/gcc/testsuite/g++.dg/cpp0x/union4.C
@@ -3,7 +3,7 @@
struct SFoo
{
- SFoo() =delete; // { dg-error "declared" }
+ SFoo() =delete; // { dg-message "declared" }
};
union UFoo // { dg-error "deleted" }
diff --git a/gcc/testsuite/g++.dg/template/crash108.C b/gcc/testsuite/g++.dg/template/crash108.C
index b6f49a19e58..221d80ee5f1 100644
--- a/gcc/testsuite/g++.dg/template/crash108.C
+++ b/gcc/testsuite/g++.dg/template/crash108.C
@@ -1,5 +1,5 @@
// PR c++/50861
template<class T> struct A {A(int b=k(0));}; // { dg-error "parameter|arguments" }
-void f(int k){A<int> a;} // // { dg-error "declared" }
+void f(int k){A<int> a;} // // { dg-message "declared" }
// { dg-message "note" "note" { target *-*-* } 3 }
diff --git a/gcc/testsuite/g++.dg/template/crash41.C b/gcc/testsuite/g++.dg/template/crash41.C
index 9a440b0761e..16e7028a668 100644
--- a/gcc/testsuite/g++.dg/template/crash41.C
+++ b/gcc/testsuite/g++.dg/template/crash41.C
@@ -1,7 +1,7 @@
// PR c++/22464
template<typename T>
-void do_something(const T* A) // { dg-error "declared" }
+void do_something(const T* A) // { dg-message "declared" }
{
struct helper_t{
helper_t() {
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/local.C b/gcc/testsuite/g++.old-deja/g++.jason/local.C
index 21fa9f58771..18d810a33ba 100644
--- a/gcc/testsuite/g++.old-deja/g++.jason/local.C
+++ b/gcc/testsuite/g++.old-deja/g++.jason/local.C
@@ -5,7 +5,7 @@ int x;
void f ()
{
static int s;
- int x; // { dg-error "" } referenced below
+ int x; // { dg-message "" } referenced below
extern int q();
struct local {
diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility3.C b/gcc/testsuite/g++.old-deja/g++.law/visibility3.C
index 64d64df647f..ddbbc84badc 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/visibility3.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/visibility3.C
@@ -11,7 +11,7 @@ int x;
int main(void)
{
static int s;
- int x; // { dg-error "" } declared
+ int x; // { dg-message "" } declared
extern int g();
struct local {
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 2350efe1257..3952b0b9137 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,8 +1,14 @@
+2013-06-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/57419
+ * testsuite/20_util/default_delete/48631_neg.cc: Adjust.
+
2013-06-01 Ed Smith-Rowland <3dw4rd@verizon.net>
- include/std/chrono: Collapse redundant 'inline' from 'inline constexpr'.
- include/std/tuple: Ditto.
- include/bits/move.h: Ditto.
+ * include/std/chrono: Collapse redundant 'inline' from 'inline
+ constexpr'.
+ * include/std/tuple: Ditto.
+ * include/bits/move.h: Ditto.
2013-05-30 Ed Smith-Rowland <3dw4rd@verizon.net>
diff --git a/libstdc++-v3/testsuite/20_util/default_delete/48631_neg.cc b/libstdc++-v3/testsuite/20_util/default_delete/48631_neg.cc
index d0619fd9ca0..d4c17288a99 100644
--- a/libstdc++-v3/testsuite/20_util/default_delete/48631_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/default_delete/48631_neg.cc
@@ -27,4 +27,4 @@ struct D : B { };
D d;
std::default_delete<B[]> db;
typedef decltype(db(&d)) type; // { dg-error "use of deleted function" }
-// { dg-error "declared here" "" { target *-*-* } 122 }
+// { dg-prune-output "declared" }