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

Reply via email to