Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
be529572
Commit
be529572
authored
Jan 30, 2012
by
Dodji Seketeli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "PR c++/51641 - Lookup finds enclosing class member instead of template parameter"
This reverts commit r183726 From-SVN: r183728
parent
12e95d87
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
42 additions
and
78 deletions
+42
-78
gcc/cp/ChangeLog
+0
-11
gcc/cp/cp-tree.h
+1
-1
gcc/cp/name-lookup.c
+9
-27
gcc/cp/pt.c
+32
-12
gcc/testsuite/ChangeLog
+0
-5
gcc/testsuite/g++.dg/lookup/hidden-class17.C
+0
-22
No files found.
gcc/cp/ChangeLog
View file @
be529572
2012-01-30 Dodji Seketeli <dodji@redhat.com>
PR c++/51641
* cp-tree.h (template_type_parameter_p): Declare new function.
(parameter_of_template_p): Remove
* pt.c (template_type_parameter_p): Define new function.
(parameter_of_template_p): Remove.
* name-lookup.c (binding_to_template_parms_of_scope_p): Don't rely
on parameter_of_template_p anymore. Compare the level of the
template parameter to the depth of the template.
2012-01-29 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51327
...
...
gcc/cp/cp-tree.h
View file @
be529572
...
...
@@ -5357,10 +5357,10 @@ extern bool explicit_class_specialization_p (tree);
extern
int
push_tinst_level
(
tree
);
extern
void
pop_tinst_level
(
void
);
extern
struct
tinst_level
*
outermost_tinst_level
(
void
);
extern
bool
parameter_of_template_p
(
tree
,
tree
);
extern
void
init_template_processing
(
void
);
extern
void
print_template_statistics
(
void
);
bool
template_template_parameter_p
(
const_tree
);
bool
template_type_parameter_p
(
const_tree
);
extern
bool
primary_template_instantiation_p
(
const_tree
);
extern
tree
get_primary_template_innermost_parameters
(
const_tree
);
extern
tree
get_template_parms_at_level
(
tree
,
int
);
...
...
gcc/cp/name-lookup.c
View file @
be529572
...
...
@@ -4466,39 +4466,21 @@ static bool
binding_to_template_parms_of_scope_p
(
cxx_binding
*
binding
,
cp_binding_level
*
scope
)
{
tree
binding_value
,
tmpl
;
int
level
;
tree
binding_value
;
if
(
!
binding
||
!
scope
)
return
false
;
binding_value
=
binding
->
value
?
binding
->
value
:
binding
->
type
;
/* BINDING_VALUE must be a template parm. */
if
(
binding_value
==
NULL_TREE
||
(
!
DECL_P
(
binding_value
)
||
!
DECL_TEMPLATE_PARM_P
(
binding_value
)))
return
false
;
/* The level of BINDING_VALUE. */
level
=
template_type_parameter_p
(
binding_value
)
?
TEMPLATE_PARM_LEVEL
(
TEMPLATE_TYPE_PARM_INDEX
(
TREE_TYPE
(
binding_value
)))
:
TEMPLATE_PARM_LEVEL
(
DECL_INITIAL
(
binding_value
));
/* The template of the current scope, iff said scope is a primary
template. */
tmpl
=
(
scope
&&
scope
->
this_entity
&&
get_template_info
(
scope
->
this_entity
)
&&
PRIMARY_TEMPLATE_P
(
TI_TEMPLATE
(
get_template_info
(
scope
->
this_entity
))))
?
TI_TEMPLATE
(
get_template_info
(
scope
->
this_entity
))
:
NULL_TREE
;
/* If the level of the parm BINDING_VALUE equals the depth of TMPL,
then BINDING_VALUE is a parameter of TMPL. */
return
(
tmpl
&&
level
==
TMPL_PARMS_DEPTH
(
DECL_TEMPLATE_PARMS
(
tmpl
)));
return
(
scope
&&
scope
->
this_entity
&&
get_template_info
(
scope
->
this_entity
)
&&
PRIMARY_TEMPLATE_P
(
TI_TEMPLATE
(
get_template_info
(
scope
->
this_entity
)))
&&
parameter_of_template_p
(
binding_value
,
TI_TEMPLATE
(
get_template_info
\
(
scope
->
this_entity
))));
}
/* Return the innermost non-namespace binding for NAME from a scope
...
...
gcc/cp/pt.c
View file @
be529572
...
...
@@ -2890,18 +2890,6 @@ template_template_parameter_p (const_tree parm)
return
DECL_TEMPLATE_TEMPLATE_PARM_P
(
parm
);
}
/* Return true iff PARM is a DECL representing a type template
parameter. */
bool
template_type_parameter_p
(
const_tree
parm
)
{
return
(
parm
&&
(
TREE_CODE
(
parm
)
==
TYPE_DECL
||
TREE_CODE
(
parm
)
==
TEMPLATE_DECL
)
&&
DECL_TEMPLATE_PARM_P
(
parm
));
}
/* Return the template parameters of T if T is a
primary template instantiation, NULL otherwise. */
...
...
@@ -8149,6 +8137,38 @@ outermost_tinst_level (void)
return
level
;
}
/* Returns TRUE if PARM is a parameter of the template TEMPL. */
bool
parameter_of_template_p
(
tree
parm
,
tree
templ
)
{
tree
parms
;
int
i
;
if
(
!
parm
||
!
templ
)
return
false
;
gcc_assert
(
DECL_TEMPLATE_PARM_P
(
parm
));
gcc_assert
(
TREE_CODE
(
templ
)
==
TEMPLATE_DECL
);
parms
=
DECL_TEMPLATE_PARMS
(
templ
);
parms
=
INNERMOST_TEMPLATE_PARMS
(
parms
);
for
(
i
=
0
;
i
<
TREE_VEC_LENGTH
(
parms
);
++
i
)
{
tree
p
=
TREE_VALUE
(
TREE_VEC_ELT
(
parms
,
i
));
if
(
p
==
error_mark_node
)
continue
;
if
(
parm
==
p
||
(
DECL_INITIAL
(
parm
)
&&
DECL_INITIAL
(
parm
)
==
DECL_INITIAL
(
p
)))
return
true
;
}
return
false
;
}
/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
vector of template arguments, as for tsubst.
...
...
gcc/testsuite/ChangeLog
View file @
be529572
2012-01-30 Dodji Seketeli <dodji@redhat.com>
PR c++/51641
* g++.dg/lookup/hidden-class17.C: New test.
2012-01-30 Jakub Jelinek <jakub@redhat.com>
PR debug/52027
...
...
gcc/testsuite/g++.dg/lookup/hidden-class17.C
deleted
100644 → 0
View file @
12e95d87
// Origin PR c++/51641
// { dg-do compile }
struct
A
{
struct
B
{
typedef
int
X
;
};
};
template
<
class
B
>
struct
C
:
A
{
B
::
X
q
;
// Ok: A::B.
struct
U
{
typedef
int
X
;
};
template
<
class
U
>
struct
D
;
};
template
<
class
B
>
template
<
class
U
>
struct
C
<
B
>::
D
{
typename
U
::
X
r
;
// { dg-error "" }
};
C
<
int
>::
D
<
double
>
y
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment