On Sun, Sep 30, 2018 at 1:55 PM Nathan Chancellor <natechancellor@xxxxxxxxx> wrote: > > Clang warns that the __weak attribute is going to be ignored on > osd_root_object because it's not in the correct location (needs to be > after the type). > > ./include/scsi/osd_types.h:31:21: warning: 'weak' attribute only applies > to variables, functions, and classes [-Wignored-attributes] > static const struct __weak osd_obj_id osd_root_object = {0, 0}; > ^ > > Turns out that GCC ignores the attribute too albeit silently because > moving the attribute after either osd_obj_id or osd_root_object like > all other uses of __weak on variables in the kernel causes a build > error on both GCC and Clang because static variables cannot be weak > since weak definitions rely on not having internal linkage: > > ./include/scsi/osd_types.h:31:32: error: weak declaration cannot have > internal linkage > static const struct osd_obj_id __weak osd_root_object = {0, 0}; > ^ > > Just remove the attribute because it hasn't been correct since the > initial addition of this file in commit de258bf5e638 ("[SCSI] libosd: > OSDv1 Headers"). > > Reported-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > Signed-off-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > --- > include/scsi/osd_types.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/scsi/osd_types.h b/include/scsi/osd_types.h > index 48e8a165e136..6b6fdcafa6cc 100644 > --- a/include/scsi/osd_types.h > +++ b/include/scsi/osd_types.h > @@ -28,7 +28,7 @@ struct osd_obj_id { > osd_id id; > }; > > -static const struct __weak osd_obj_id osd_root_object = {0, 0}; > +static const struct osd_obj_id osd_root_object = {0, 0}; > > struct osd_attr { > u32 attr_page; > -- > 2.19.0 > LGTM, thank you for sending, Nathan. -- Thanks, ~Nick Desaulniers