@@ -2839,7 +2839,7 @@ static int prototype__stdio_fprintf_value(struct prototype *prototype, struct ty
2839
2839
return printed ;
2840
2840
}
2841
2841
2842
- static int class_member_filter__parse (struct class_member_filter * filter , struct type * type , char * sfilter )
2842
+ static int class_member_filter__parse (struct class_member_filter * filter , struct type * type , const struct cu * cu , char * sfilter )
2843
2843
{
2844
2844
const char * member_name = sfilter ;
2845
2845
char * sep = strstr (sfilter , "==" );
@@ -2888,9 +2888,17 @@ static int class_member_filter__parse(struct class_member_filter *filter, struct
2888
2888
2889
2889
// If t he filter member is the 'type=' one:
2890
2890
2891
- if (list_empty (& type -> type_enum ) || type -> type_member != filter -> left ) {
2891
+ if (list_empty (& type -> type_enum )) {
2892
+ if (global_verbose ) {
2893
+ fprintf (stderr , "Symbolic right operand in '%s' but no way to resolve it to a number (type_enum empty or hasn't found any so far) at CU '%s')\n" ,
2894
+ sfilter , cu -> name );
2895
+ }
2896
+ return -1 ;
2897
+ }
2898
+
2899
+ if (type -> type_member != filter -> left ) {
2892
2900
if (global_verbose )
2893
- fprintf (stderr , "Symbolic right operand in '%s' but no way to resolve it to a number (type= + type_enum= so far )\n" , sfilter );
2901
+ fprintf (stderr , "type->type_member (%p) != filter->left (%p )\n" , type -> type_member , filter -> left );
2894
2902
return -1 ;
2895
2903
}
2896
2904
@@ -2910,11 +2918,11 @@ static int class_member_filter__parse(struct class_member_filter *filter, struct
2910
2918
return 0 ;
2911
2919
}
2912
2920
2913
- static struct class_member_filter * class_member_filter__new (struct type * type , char * sfilter )
2921
+ static struct class_member_filter * class_member_filter__new (struct type * type , const struct cu * cu , char * sfilter )
2914
2922
{
2915
2923
struct class_member_filter * filter = zalloc (sizeof (* filter ));
2916
2924
2917
- if (filter && class_member_filter__parse (filter , type , sfilter )) {
2925
+ if (filter && class_member_filter__parse (filter , type , cu , sfilter )) {
2918
2926
free (filter );
2919
2927
filter = NULL ;
2920
2928
}
@@ -3394,7 +3402,7 @@ static enum load_steal_kind pahole_stealer(struct cu *cu,
3394
3402
}
3395
3403
3396
3404
if (prototype -> filter ) {
3397
- type -> filter = class_member_filter__new (type , prototype -> filter );
3405
+ type -> filter = class_member_filter__new (type , cu , prototype -> filter );
3398
3406
if (type -> filter == NULL ) {
3399
3407
fprintf (stderr , "pahole: invalid filter '%s' for '%s'\n" ,
3400
3408
prototype -> filter , prototype -> name );
0 commit comments