[clang] [HLSL] Support vector swizzles on scalars (PR #67700)

via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 12 11:29:53 PDT 2023


================
@@ -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


More information about the cfe-commits mailing list