================ @@ -104,9 +104,39 @@ class PrototypeParser { void ParseType(StringRef T) { T = T.trim(); + + auto ConsumeAddrSpace = [&]() -> std::optional<unsigned> { + T = T.trim(); + if (!T.consume_back(">")) + return std::nullopt; + + auto Open = T.find_last_of('<'); + if (Open == StringRef::npos) + PrintFatalError(Loc, "Mismatched angle-brackets in type"); + + StringRef ArgStr = T.substr(Open + 1); + T = T.slice(0, Open); + if (!T.consume_back("address_space")) + PrintFatalError(Loc, + "Only `address_space<N>` supported as a parameterized " + "pointer or reference type qualifier"); + + unsigned Number = 0; + if (ArgStr.getAsInteger(10, Number)) + PrintFatalError( + Loc, "Expected an integer argument to the address_space qualifier"); + if (Number == 0) + PrintFatalError(Loc, "No need for a qualifier for address space `0`"); + return Number; + }; + if (T.consume_back("*")) { + // Pointers may have an address space qualifier immediately before them. + std::optional<unsigned> AS = ConsumeAddrSpace(); ---------------- Artem-B wrote:
> I'm not an expert at any of this... I'm just muddling my way through to try > and make some tactical improvements. Welcome to the club. This matches my own thoughts. :-) I agree that it would not improve effective test coverage much, but it would be useful for whoever may need to tinker with these parts of tablegen in the future. Having wider range of inputs elsewhere is great, but it is way less convenient to work with, considering that it tends to be much larger and has additional irrelevant moving parts. https://github.com/llvm/llvm-project/pull/122873 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits