[PATCH] D38816: Convert clang::LangAS to a strongly typed enum

Alexander Richardson via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 13 09:26:09 PDT 2017


arichardson added inline comments.


================
Comment at: lib/AST/TypePrinter.cpp:1323
     OS << "address_space(";
-    OS << T->getEquivalentType().getAddressSpace();
+    OS << T->getEquivalentType()
+              .getQualifiers()
----------------
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.


https://reviews.llvm.org/D38816





More information about the cfe-commits mailing list