Bug 19836 - -E -dD includes predefined macros
Summary: -E -dD includes predefined macros
Status: RESOLVED INVALID
Alias: None
Product: gcc
Classification: Unclassified
Component: preprocessor (show other bugs)
Version: 3.4.3
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-02-09 06:10 UTC by Jason Khallouf
Modified: 2005-07-23 22:49 UTC (History)
1 user (show)

See Also:
Host: i686-pc-linux-gnu
Target: i686-pc-linux-gnu
Build: i686-pc-linux-gnu
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jason Khallouf 2005-02-09 06:10:41 UTC
The -dD flag includes all the defined macros that -dM includes.  Unless I'm
mistaken in my understanding of a predefined macro, it shouldn't include the
ones defined in the std C headers.  This is the case for 3.4.3 and 3.3.5.  

=======

~/misc> touch foo.h ; cpp -dD foo.h | sort > test2
~/misc> touch foo.h ; cpp -dM foo.h | sort > test1
~/misc> diff test1 test2
0a1,9
>
>
>
>
>
> # 1 "<built-in>"
> # 1 "<command line>"
> # 1 "foo.h"
> # 1 "foo.h"
~/misc> 
~/misc> cat test1
#define __CHAR_BIT__ 8
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __DBL_DIG__ 15
#define __DBL_EPSILON__ 2.2204460492503131e-16
#define __DBL_HAS_INFINITY__ 1
#define __DBL_HAS_QUIET_NAN__ 1
#define __DBL_MANT_DIG__ 53
#define __DBL_MAX_10_EXP__ 308
#define __DBL_MAX__ 1.7976931348623157e+308
#define __DBL_MAX_EXP__ 1024
#define __DBL_MIN_10_EXP__ (-307)
#define __DBL_MIN__ 2.2250738585072014e-308
#define __DBL_MIN_EXP__ (-1021)
#define __DECIMAL_DIG__ 21
#define __ELF__ 1
#define __FINITE_MATH_ONLY__ 0
#define __FLT_DENORM_MIN__ 1.40129846e-45F
#define __FLT_DIG__ 6
#define __FLT_EPSILON__ 1.19209290e-7F
#define __FLT_EVAL_METHOD__ 2
#define __FLT_HAS_INFINITY__ 1
#define __FLT_HAS_QUIET_NAN__ 1
#define __FLT_MANT_DIG__ 24
#define __FLT_MAX_10_EXP__ 38
#define __FLT_MAX__ 3.40282347e+38F
#define __FLT_MAX_EXP__ 128
#define __FLT_MIN_10_EXP__ (-37)
#define __FLT_MIN__ 1.17549435e-38F
#define __FLT_MIN_EXP__ (-125)
#define __FLT_RADIX__ 2
#define __GNUC__ 3
#define __GNUC_MINOR__ 4
#define __GNUC_PATCHLEVEL__ 3
#define __gnu_linux__ 1
#define __GXX_ABI_VERSION 1002
#define __i386 1
#define __i386__ 1
#define i386 1
#define __INT_MAX__ 2147483647
#define __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L
#define __LDBL_DIG__ 18
#define __LDBL_EPSILON__ 1.08420217248550443401e-19L
#define __LDBL_HAS_INFINITY__ 1
#define __LDBL_HAS_QUIET_NAN__ 1
#define __LDBL_MANT_DIG__ 64
#define __LDBL_MAX_10_EXP__ 4932
#define __LDBL_MAX__ 1.18973149535723176502e+4932L
#define __LDBL_MAX_EXP__ 16384
#define __LDBL_MIN_10_EXP__ (-4931)
#define __LDBL_MIN__ 3.36210314311209350626e-4932L
#define __LDBL_MIN_EXP__ (-16381)
#define __linux 1
#define __linux__ 1
#define linux 1
#define __LONG_LONG_MAX__ 9223372036854775807LL
#define __LONG_MAX__ 2147483647L
#define __NO_INLINE__ 1
#define __PTRDIFF_TYPE__ int
#define __REGISTER_PREFIX__
#define __SCHAR_MAX__ 127
#define __SHRT_MAX__ 32767
#define __SIZE_TYPE__ unsigned int
#define __STDC_HOSTED__ 1
#define __tune_i686__ 1
#define __tune_pentiumpro__ 1
#define __unix 1
#define __unix__ 1
#define unix 1
#define __USER_LABEL_PREFIX__
#define __VERSION__ "3.4.3"
#define __WCHAR_MAX__ 2147483647
#define __WCHAR_TYPE__ long int
#define __WINT_TYPE__ unsigned int
Comment 1 Andrew Pinski 2005-02-09 06:15:01 UTC
This is documented to do this so this is not a bug.
Comment 2 Jason Khallouf 2005-02-09 06:27:05 UTC
(In reply to comment #1)
> This is documented to do this so this is not a bug.

I thought -dD was supposed to NOT include predefined macros?

Jason
Comment 3 Andrew Pinski 2005-02-09 06:39:19 UTC
(In reply to comment #2)
> (In reply to comment #1)
> > This is documented to do this so this is not a bug.
> 
> I thought -dD was supposed to NOT include predefined macros?
This is what the documentation say:
Tell the preprocessing to pass all macro definitions into the output, in their proper sequence in the rest 
of the output.

see the "all" there it really means all, even predefined ones.
Comment 4 Neil Booth 2005-02-09 11:06:07 UTC
Subject: Re:  -E -dD includes predefined macros

jason at catapult dot com wrote:-

> 
> ------- Additional Comments From jason at catapult dot com  2005-02-09 06:27 -------
> (In reply to comment #1)
> > This is documented to do this so this is not a bug.
> 
> I thought -dD was supposed to NOT include predefined macros?

Use -undef if you don't want them.
Comment 5 Jason Khallouf 2005-02-09 22:44:37 UTC
(In reply to comment #3)
> (In reply to comment #2)
> > (In reply to comment #1)
> > > This is documented to do this so this is not a bug.
> > 
> > I thought -dD was supposed to NOT include predefined macros?
> This is what the documentation say:
> Tell the preprocessing to pass all macro definitions into the output, in their
proper sequence in the rest 
> of the output.
> 
> see the "all" there it really means all, even predefined ones.

Where did you read this?  This is what is written in the CPP and GCC manpages,
and the GCC online docs.

D - Like M except in two respects: it does not include the predefined macros,
and it outputs both the #define directives and the result of preprocessing. Both
kinds of output go to the standard output file. 

Neil, thanks for the suggestion, it removed all of them except for #define
__STDC_HOSTED__ 1, which I can take out with sed.
Comment 6 Neil Booth 2005-02-09 22:48:43 UTC
Subject: Re:  -E -dD includes predefined macros

jason at catapult dot com wrote:-

> Where did you read this?  This is what is written in the CPP and GCC manpages,
> and the GCC online docs.
> 
> D - Like M except in two respects: it does not include the predefined macros,
> and it outputs both the #define directives and the result of preprocessing. Both
> kinds of output go to the standard output file. 
> 
> Neil, thanks for the suggestion, it removed all of them except for #define
> __STDC_HOSTED__ 1, which I can take out with sed.

OK, so 2 bugs here then 8-)
Comment 7 Jason Khallouf 2005-02-09 23:50:35 UTC
(In reply to comment #6)
> Subject: Re:  -E -dD includes predefined macros
> 
> jason at catapult dot com wrote:-
> 
> > Where did you read this?  This is what is written in the CPP and GCC manpages,
> > and the GCC online docs.
> > 
> > D - Like M except in two respects: it does not include the predefined macros,
> > and it outputs both the #define directives and the result of preprocessing. Both
> > kinds of output go to the standard output file. 
> > 
> > Neil, thanks for the suggestion, it removed all of them except for #define
> > __STDC_HOSTED__ 1, which I can take out with sed.
> 
> OK, so 2 bugs here then 8-)
> 

Maybe not.  The docs mention that "The standard predefined macros remain
defined.".  I guess it depend on what sort of predefined macro __STDC_HOSTED__ is.

Another problem with the -dD flag I've just found is that it includes the macros
predefined with the -D flag.