================ @@ -930,7 +930,11 @@ NumericLiteralParser::NumericLiteralParser(StringRef TokSpelling, // and FP constants (specifically, the 'pp-number' regex), and assumes that // the byte at "*end" is both valid and not part of the regex. Because of // this, it doesn't have to check for 'overscan' in various places. - if (isPreprocessingNumberBody(*ThisTokEnd)) { + // Note: For HLSL, the end token is allowed to be '.' which would be in the + // 'pp-number' regex. This is required to support vector swizzles on numeric + // constants (i.e. 1.xx or 1.5f.rrr). + if (isPreprocessingNumberBody(*ThisTokEnd) && + !(LangOpts.HLSL && *ThisTokEnd == '.')) { ---------------- cor3ntin wrote:
This looks fine to me - if a bit hackish. What surprises me is that the `if` existed at all before the change. `LexNumericConstant` would have consumed everything it could. There should *never* be a valid pp-number after. We should be able to write something like ```cpp assert(!isPreprocessingNumberBody(*ThisTokEnd) || (LangOpts.HLS && *ThisTokEnd == '.')) ``` and remove that `if` / diagnostic (which is never tested) https://github.com/llvm/llvm-project/pull/67700 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits