c++: Stat-hack for members [PR 98530]
This was a header file that deployed the stat-hack inside a class (both a member-class and a [non-static data] member had the same name). Due to the way that's represented in name lookup we missed the class. Sadly just changing the representation globally has detrimental effects elsewhere, and this is a rare case, so just creating a new overload on the fly shouldn't be a problem. PR c++/98530 gcc/cp/ * name-lookup.c (lookup_class_binding): Rearrange a stat-hack. gcc/testsuite/ * g++.dg/modules/stat-mem-1.h: New. * g++.dg/modules/stat-mem-1_a.H: New. * g++.dg/modules/stat-mem-1_b.C: New.
This commit is contained in:
parent
a1a967ce1f
commit
3c1cf7350b
@ -3926,11 +3926,16 @@ lookup_class_binding (tree klass, tree name)
|
||||
vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass);
|
||||
|
||||
found = member_vec_binary_search (member_vec, name);
|
||||
if (IDENTIFIER_CONV_OP_P (name))
|
||||
if (!found)
|
||||
;
|
||||
else if (STAT_HACK_P (found))
|
||||
/* Rearrange the stat hack so that we don't need to expose that
|
||||
internal detail. */
|
||||
found = ovl_make (STAT_TYPE (found), STAT_DECL (found));
|
||||
else if (IDENTIFIER_CONV_OP_P (name))
|
||||
{
|
||||
gcc_checking_assert (name == conv_op_identifier);
|
||||
if (found)
|
||||
found = OVL_CHAIN (found);
|
||||
found = OVL_CHAIN (found);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
6
gcc/testsuite/g++.dg/modules/stat-mem-1.h
Normal file
6
gcc/testsuite/g++.dg/modules/stat-mem-1.h
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
struct fpu {
|
||||
struct NAME {
|
||||
int state;
|
||||
} NAME;
|
||||
};
|
5
gcc/testsuite/g++.dg/modules/stat-mem-1_a.H
Normal file
5
gcc/testsuite/g++.dg/modules/stat-mem-1_a.H
Normal file
@ -0,0 +1,5 @@
|
||||
// { dg-additional-options -fmodule-header }
|
||||
// PR c++ 98530 stat-hack inside a structure
|
||||
// { dg-module-cmi {} }
|
||||
|
||||
#include "stat-mem-1.h"
|
4
gcc/testsuite/g++.dg/modules/stat-mem-1_b.C
Normal file
4
gcc/testsuite/g++.dg/modules/stat-mem-1_b.C
Normal file
@ -0,0 +1,4 @@
|
||||
// { dg-additional-options "-fmodules-ts -fno-module-lazy" }
|
||||
|
||||
#include "stat-mem-1.h"
|
||||
import "stat-mem-1_a.H";
|
Loading…
Reference in New Issue
Block a user