193c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman// RUN: %clang_cc1 -fsyntax-only -verify %s
293c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman
393c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman// Make sure diagnostics that we don't print based on runtime control
493c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman// flow are delayed correctly in cases where we can't immediately tell whether
593c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman// the context is unevaluated.
693c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman
793c878ee093f2a233c32b29f074e6a3f511e333fEli Friedmannamespace std {
893c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman  class type_info;
993c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman}
1093c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman
1193c878ee093f2a233c32b29f074e6a3f511e333fEli Friedmanint& NP(int);
1293c878ee093f2a233c32b29f074e6a3f511e333fEli Friedmanvoid test1() { (void)typeid(NP(1 << 32)); }
1393c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman
1493c878ee093f2a233c32b29f074e6a3f511e333fEli Friedmanclass Poly { virtual ~Poly(); };
1593c878ee093f2a233c32b29f074e6a3f511e333fEli FriedmanPoly& P(int);
1693c878ee093f2a233c32b29f074e6a3f511e333fEli Friedmanvoid test2() { (void)typeid(P(1 << 32)); } // expected-warning {{shift count >= width of type}}
1793c878ee093f2a233c32b29f074e6a3f511e333fEli Friedman
1893c878ee093f2a233c32b29f074e6a3f511e333fEli Friedmanvoid test3() { 1 ? (void)0 : (void)typeid(P(1 << 32)); }
19