aaron.ballman added inline comments.

================
Comment at: clang/lib/AST/Interp/Interp.h:1291-1305
+  if (RHS.isNegative()) {
     const SourceInfo &Loc = S.Current->getSource(OpPC);
     S.CCEDiag(Loc, diag::note_constexpr_negative_shift) << RHS.toAPSInt();
-    return ShiftLeft<TL, TR>(S, OpPC, LHS, Trunc<TR, TL>(S, OpPC, Bits, -RHS));
-  } else {
-    return ShiftRight<TL, TR>(S, OpPC, LHS, Trunc<TR, TL>(S, OpPC, Bits, RHS));
+    return false;
   }
-}
 
+  // C++11 [expr.shift]p1: Shift width must be less than the bit width of
----------------
Should we factor this logic out into a common helper since it's the same 
between shl and shr? (It could be done as an NFC commit after we land this, 
too, I don't feel super strongly about it.)


================
Comment at: clang/test/AST/Interp/shifts.cpp:6
+
+#define CHAR_BIT (sizeof(char) * 8)
+#define WORD_BIT (sizeof(int) * 8)
----------------
You can get rid of this entirely and use `__CHAR_BIT__` instead.


================
Comment at: clang/test/AST/Interp/shifts.cpp:7
+#define CHAR_BIT (sizeof(char) * 8)
+#define WORD_BIT (sizeof(int) * 8)
+#define INT_MAX (__INT_MAX__)
----------------
You can get rid of this entirely and use `__INT_WIDTH__` instead.


================
Comment at: clang/test/AST/Interp/shifts.cpp:8
+#define WORD_BIT (sizeof(int) * 8)
+#define INT_MAX (__INT_MAX__)
+#define INT_MIN (~__INT_MAX__)
----------------
No need for this define at all, but fine to leave if you want it for parity 
with `INT_MIN`.


================
Comment at: clang/test/AST/Interp/shifts.cpp:116
+  static_assert(true << 1, "");
+  static_assert(1 << (WORD_BIT +1) == 0, "");  // expected-error {{not an 
integral constant expression}} \
+                                               // expected-note {{>= width of 
type 'int'}} \
----------------
I'd also appreciate tests showing:
```
constexpr int i1 = 1 << -1; // ill-formed due to UB
constexpr int i2 = 1 << (WORD_BIT + 1); // ill-formed due to UB
constexpr char c = 1;
constexpr int i3 = c << (CHAR_BIT + 1); // Not ill-formed
```


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136532/new/

https://reviews.llvm.org/D136532

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to