yaxunl added inline comments.
================ Comment at: lib/AST/TypePrinter.cpp:1323 OS << "address_space("; - OS << T->getEquivalentType().getAddressSpace(); + OS << T->getEquivalentType() + .getQualifiers() ---------------- arichardson wrote: > arichardson wrote: > > Anastasia wrote: > > > arichardson wrote: > > > > Anastasia wrote: > > > > > arichardson wrote: > > > > > > Anastasia wrote: > > > > > > > Why do we need this change? > > > > > > `__attribute__((address_space(n)))` is a target address space and > > > > > > not a language address space like `LangAS::opencl_generic`. Isn't > > > > > > `Qualifiers::getAddressSpaceAttributePrintValue()` meant exactly > > > > > > for this use case? > > > > > Yes, I think there are some adjustment we do in this method to get > > > > > the original source value to be printed corerctly. Does this mean we > > > > > have no tests that caught this issue? > > > > Seems like it, all tests pass both with and without this patch. > > > Strange considering that we have this attribute printed in some error > > > messages of some Sema tests. If I compile this code without your patch: > > > > > > ``` > > > typedef int __attribute__((address_space(1))) int_1; > > > typedef int __attribute__((address_space(2))) int_2; > > > > > > void f0(int_1 &); > > > void f0(const int_1 &); > > > > > > void test_f0() { > > > int i; > > > static int_2 i2; > > > f0(i); > > > f0(i2); > > > } > > > ``` > > > > > > I get the address spaces printed correctly inside the type: > > > note: candidate function not viable: 1st argument ('int_2' (aka > > > '__attribute__((address_space(2))) int')) is in address space 2, but > > > parameter must be in address space 1 > > > > > > Perhaps @yaxunl could comment further on whether this change is needed. > > My guess is that it doesn't go through that switch statement but rather > > through `Qualifiers::print()`. I'll try adding a llvm_unreachable() to see > > if there are any tests that go down this path. > I just ran the clang tests with an llvm_unreachable() here and none of them > failed. So it seems like we don't have anything testing this code path. Sorry for the delay. This part of code is for printing the addr space of AttributedType. Since it seems not used by any language yet, there is no test for it. It is possible a non-target-specific address space being printed here if a language chooses to use AttributedType to represent address space. Therefore a proper fix would be isolate the code for printing address space from Qualifiers::print and re-use it here so that addr space is printed in consistent way no matter it is represented as qualifier or as AttributedType. https://reviews.llvm.org/D38816 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits