10b495cdb1939f8b9e8a470e138dba5204872c38cBenjamin Kramer// RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s
246717308883538841da7059e72bc898abe0c8724Douglas Gregor// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify -pedantic %s
346717308883538841da7059e72bc898abe0c8724Douglas Gregorfloat f = 0x1p+1; // expected-warning{{hexadecimal floating constants are a C99 feature}}
4b534a9ed04b343534e5f277b81d1170de3204164Aaron Ballmandouble e = 0x.p0; //expected-error{{hexadecimal floating constants require a significand}}
566b0ebac276353f3ff7d41eaba3e6d24d48663b7Aaron Ballmandouble d = 0x.2p2; // expected-warning{{hexadecimal floating constants are a C99 feature}}
666b0ebac276353f3ff7d41eaba3e6d24d48663b7Aaron Ballmanfloat g = 0x1.2p2; // expected-warning{{hexadecimal floating constants are a C99 feature}}
766b0ebac276353f3ff7d41eaba3e6d24d48663b7Aaron Ballmandouble h = 0x1.p2; // expected-warning{{hexadecimal floating constants are a C99 feature}}
8d2e95d1538ff91fe902464f02f83429f96117af5Richard Smith
9d2e95d1538ff91fe902464f02f83429f96117af5Richard Smith// PR12717: In order to minimally diverge from the C++ standard, we do not lex
10d2e95d1538ff91fe902464f02f83429f96117af5Richard Smith// 'p[+-]' as part of a pp-number unless the token starts 0x and doesn't contain
11d2e95d1538ff91fe902464f02f83429f96117af5Richard Smith// an underscore.
12d2e95d1538ff91fe902464f02f83429f96117af5Richard Smithdouble i = 0p+3; // expected-error{{invalid suffix 'p' on integer constant}}
13d2e95d1538ff91fe902464f02f83429f96117af5Richard Smith#define PREFIX(x) foo ## x
14d2e95d1538ff91fe902464f02f83429f96117af5Richard Smithdouble foo0p = 1, j = PREFIX(0p+3); // ok
15d2e95d1538ff91fe902464f02f83429f96117af5Richard Smithdouble k = 0x42_amp+3; // expected-error-re{{invalid suffix '_amp' on integer constant|no matching literal operator for call to 'operator "" _amp'}}
16