[llvm-commits] [llvm-gcc-4.2] r58347 - in /llvm-gcc-4.2/trunk/gcc: cp/name-lookup.c testsuite/g++.apple/lookup-1.C
Dale Johannesen
dalej at apple.com
Tue Oct 28 13:23:16 PDT 2008
Author: johannes
Date: Tue Oct 28 15:23:11 2008
New Revision: 58347
URL: http://llvm.org/viewvc/llvm-project?rev=58347&view=rev
Log:
Bring fix for PR 2867 over from Apple gcc-4.2.
Fix by Mike Stump. His comment:
This is one of the corner cases in C++ that just
makes the head hurt. We don't want to find hidden
friends from local classes during name lookup at
this point. Previously we would just crash.
Added:
llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/lookup-1.C
Modified:
llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c
Modified: llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c?rev=58347&r1=58346&r2=58347&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c (original)
+++ llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c Tue Oct 28 15:23:11 2008
@@ -4039,8 +4039,13 @@
if (binding)
{
- /* Only namespace-scope bindings can be hidden. */
- gcc_assert (!hidden_name_p (binding));
+ /* APPLE LOCAL begin 6322334 */
+ /* Ick, we don't want to find a hidden friend inside a
+ local class! */
+ if (hidden_name_p (binding))
+ POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
+ /* APPLE LOCAL end 6322334 */
+
val = binding;
break;
}
Added: llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/lookup-1.C
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/g%2B%2B.apple/lookup-1.C?rev=58347&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/lookup-1.C (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/lookup-1.C Tue Oct 28 15:23:11 2008
@@ -0,0 +1,13 @@
+/* APPLE LOCAL file 6322334 */
+/* Radar 6322334 */
+
+class A {
+ void foo(const char* basename);
+};
+void A::foo(const char* basename) {
+ class B {
+ friend class C;
+ static void WaitForSinks(C:: /* { dg-error "has not been declared" } */
+ D* data); /* { dg-error "expected" } */
+ };
+}
More information about the llvm-commits
mailing list