This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Is this a compiler bug?


On Sun, Sep 21, 2014 at 6:56 PM, Steve Kargl
<sgk@troutmask.apl.washington.edu> wrote:
> + is a binary operator.  0x3ffe is a hexidecimal-constant according
> to 6.6.4.1 in n1256.pdf.  63 is, of course, a decimal-constant.


This is before tokens happen and during lexing of the program.
e+64 is exponent-part see 6.4.4.2.

Also see 6.4/4-5:
If the input stream has been parsed into preprocessing tokens up to a
given character, the
next preprocessing token is the longest sequence of characters that
could constitute a
preprocessing token. There is one exception to this rule: header name
preprocessing
tokens are recognized only within #include preprocessing directives and in
implementation-defined locations within #pragma directives. In such contexts, a
sequence of characters that could be either a header name or a string
literal is recognized
as the former.
5 EXAMPLE 1 The program fragment 1Ex is parsed as a preprocessing
number token (one that is not a
valid floating or integer constant token), even though a parse as the
pair of preprocessing tokens 1 and Ex
might produce a valid expression (for example, if Ex were a macro
defined as +1). Similarly, the program
fragment 1E1 is parsed as a preprocessing number (one that is a valid
floating constant token), whether or
not E is a macro name.


Thanks,
Andrew Pinski

>
> --
> steve
>
> On Sun, Sep 21, 2014 at 06:49:54PM -0700, Andrew Pinski wrote:
>> On Sun, Sep 21, 2014 at 6:23 PM, Steve Kargl
>> <sgk@troutmask.apl.washington.edu> wrote:
>>
>> No e+ is exponent marker.
>>
>>
>> > #include <stdio.h>
>> > #include <stdint.h>
>> >
>> > int
>> > main(void)
>> > {
>> >         uint16_t i;
>> >         i = 0x3ff0+63; printf("%x\n", i);
>> >         i = 0x3ff1+63; printf("%x\n", i);
>> >         i = 0x3ff2+63; printf("%x\n", i);
>> >         i = 0x3ff3+63; printf("%x\n", i);
>> >         i = 0x3ff4+63; printf("%x\n", i);
>> >         i = 0x3ff4+63; printf("%x\n", i);
>> >         i = 0x3ff6+63; printf("%x\n", i);
>> >         i = 0x3ff7+63; printf("%x\n", i);
>> >         i = 0x3ff8+63; printf("%x\n", i);
>> >         i = 0x3ff9+63; printf("%x\n", i);
>> >         i = 0x3ffa+63; printf("%x\n", i);
>> >         i = 0x3ffb+63; printf("%x\n", i);
>> >         i = 0x3ffc+63; printf("%x\n", i);
>> >         i = 0x3ffd+63; printf("%x\n", i);
>> >         i = 0x3ffe+63; printf("%x\n", i);
>> >         i = 0x3fff+63; printf("%x\n", i);
>> >         return 0;
>> > }
>> >
>> > --
>> > Steve
>
> --
> Steve


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]