On Tue, Aug 18, 2020 at 11:09:52AM -0700, Randy Dunlap wrote: > Hi, > > On kernel 5.9-rc1, either i386 or x86_64 builds, I am seeing these > sparse warnings: > > ../drivers/gpu/drm/ast/ast_cursor.c:256:26: CK: warning: duplicate [noderef] > ../drivers/gpu/drm/ast/ast_cursor.c:256:26: CK: error: multiple address space given: __iomem & __iomem > > for this source line: > > u8 __iomem *dst, __iomem *sig; > > > Should one of those __iomem-s be removed? I think so. It's a bit like writing int const *a, const *b; or int unsigned *a, unsigned *b; > I.e., does "__iomem" apply to everything after it, up to the ending ';', > or just up to the next comma ','? The (simplified) syntax for declarations is: declaration: declaration-specifiers [init-declarator-list] ; init-declarator-list: init-declarator init-declarator-list , init-declarator init-declarator declarator declarator = initializer declarator: [pointer] direct-declarator pointer: * [type-qualifier-list] * [type-qualifier-list] pointer direct-declarator: identifier ... Essentially, attributes are type modifiers, some acting like qualifiers and others are more like specifiers. But qualifiers and specifiers are never allowed directly after the comma because they appertain to the declaration-specifier part of the declaration. So, yes, the first __iomem applies to the whole declaration and the second one should be removed. But maybe it's not 100% clear and the best should be to use a separate declaration for each variable? Best regards, -- Luc