aaron.ballman added inline comments.
================ Comment at: lib/Sema/SemaExpr.cpp:14249 + + if (Sema::TypeHasNoDeref(Inner)) + DeclRef = E; ---------------- leonardchan wrote: > aaron.ballman wrote: > > The sugar was stripped off at the pointer level, but not at the pointee > > level. e.g., > > ``` > > typedef int (bobble); > > typedef bobble * (frobble); > > typedef frobble * yobble; > > > > yobble gobble; > > ``` > > I think you can handle this within `TypeHasNoDeref()` and that should fix > > up all the callers. > So `TypeHasNoDeref()` checks for the attribute on the base type already and > is called after the pointer is stripped off. Attempting to desugar via > `getDesugaredType()` here also removes the `address_space` attribute from the > type I'm checking. > > Do you know another method that essentially "expands" the typedefs without > stripping the qualifiers? Otherwise I think I do need do the desugaring at > the pointer level. Alternatively I could also change this method such that it > accepts pointers instead of pointees since it appears I already call > `getDesugaredType()` for almost every pointer who's pointee I'm passing to > `TypeHasNoDeref()`. > > Also I tested with your example and the warning still seems to be thrown > appropriately. I think you have to do the desugaring manually in a loop with `getSingleStepDesugaredType()` so that you don't strip off attributed type information along with the rest of the type sugar. > Also I tested with your example and the warning still seems to be thrown > appropriately. The example may depend on where you put the attribute (inside the parens vs outside the parens, for instance); it was an off-the-cuff example, so it may need some tweaking. Repository: rC Clang https://reviews.llvm.org/D49511 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits