public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Gabriel Ravier <gabravier@gmail.com>
To: Po Lu <luangruo@yahoo.com>, Eli Schwartz <eschwartz93@gmail.com>
Cc: gcc@gcc.gnu.org
Subject: Re: More C type errors by default for GCC 14
Date: Fri, 12 May 2023 13:05:50 +0200	[thread overview]
Message-ID: <b71bf6a2-2527-e970-f46c-ea6116d694d3@gmail.com> (raw)
In-Reply-To: <87h6si9jn0.fsf@yahoo.com>

On 5/12/23 07:57, Po Lu via Gcc wrote:
> Eli Schwartz <eschwartz93@gmail.com> writes:
>
>> There are ***not*** thousands of Makefiles that have this issue. But if
>> there were, then Makefiles are very easy to update, and only have to be
>> updated once per project, not thousands of times. So this is fine. You
>> may have to update your Makefile, but that is no big deal.
>>
>> It's still no big deal, no matter how much you dramatize the intensity
>> of adding a flag to your Makefiles.
> It's extra work.  Why don't I just write:
>
>    extern int foo ();
>
> above each of the new errors?
> That is just about what anyone will do when confronted by these new
> errors.  As a result, you have not ensured that any declarations are
> correct, but instead you have annoyed a lot of people and lulled
> yourself into a false sense of safety.

It's "extra work" to add 10 characters to a Makefile, but normal to add 
random faulty declarations everywhere ? I could only imagine someone 
doing this if they're being either extremely uninformed, extremely 
restricted (e.g. no change to any configuration files, no pragmas to 
disable the errors and not even having 10 seconds to look up the correct 
function prototype) or deliberately obtuse.

>
>> So you concede that GCC is not telling you, only trying and failing to
>> tell you?
> I concede that you're playing with words.
>
>> Great, so what's the problem? If GCC can't actually enforce it, and even
>> goes out of its way to offer you options to ignore what it's telling you
>> to do, then maybe...
>>
>> ... it's not telling you what to do with your code, only suggesting what
>> to do?
>>
>> So ignore the suggestion.
> Which is made annoying, especially when there is absolutely NO guarantee
> being made that the new option will stay.
>
>> I'm not sure what this semantics game here is trying to say. Is it
>> ethically and morally wrong for GCC to try to tell you what to do with
>> your code? Is it undignifying to have a mere machine go and lecture you,
>> a real human being with a consciousness and free will, what to do?
>>
>> Because if that's what this is about then I think you are taking this
>> inanimate object way too personally.
>>
>> If not, then I am simply entirely unsure what your objection is to being
>> "told".
>>
>>
>>>> Because that's exactly what is going on here. Features that were valid
>>>> C89 code are being used in a GNU99 or GNU11 code file, despite that
>>>> ***not*** being valid GNU99 or GNU11 code.
>>> How GCC currently behaves defines what is valid GNU C.
>>
>> No. Absolutely positively 100% no under any circumstances whatsoever no.
>>
>> This has been explained multiple times by the GCC developers. e.g.
>> search for references to accepts-invalid.
>>
>> """
>> They are bugs where compiler accepts something that isn't valid in
>> the selected language nor considered valid extension.
>> So, after the fix we reject something that has been accepted before.
>>
>> In the last few years (checked what was fixed in 10/11/12/13 releases so
>> far), we've fixed 12 such bugs explicitly marked that way:
>> """
> The Standard states that each conforming implementation must be
> accompanied by a document which documents each and every extension.
>
> This document is the GCC manual, which makes reference (not too clearly,
> however, which should be fixed) to both implicit int and implicit
> function declarations, which are allowed in C99 and later dialects of C.
>
> These constructs are not bugs.  These constructs explicitly defined by
> GNU C; since a diagnostic is issued, GNU C's implementation also
> conforms to the Standard.
>
>> You cannot, and are not permitted, to define "how GCC currently behaves"
>> as "defines what is valid GNU C". No one agrees with your analysis. Most
>                                      ^^^^^^
>
> I'm not a person?
Now you're the one playing with words. That, or you have a complete lack 
of understanding of extremely common English expressions, which you may 
want to work on as you will otherwise inevitably have large problems 
effectively communicating anything with people on this list.
>
>> importantly, GCC does not agree with your analysis.
> For some definition of GCC, which is apparently you.
The "definition of GCC" used here is in a more general sense, i.e. the 
GCC project and the people involved in it that would be considered 
generally representative of it. In fact, so far on this thread I've seen 
almost nobody on your side of the argument, save for a very few 
extremely loud people repeating the same arguments over and over. So far 
I've seen only a single minor GCC contributor arguing the behavior 
should be kept as-is - pretty much everyone else agrees the behavior 
should be changed. In fact, I've talked to many people who are not 
currently posting in this thread, who consider that the default should 
be changed, and are watching in consternation as a few people appear to 
be trying to hold back the entire community with extremely bad defaults.
>
>> It's a wild, wild, wild claim to begin with. You are arguing that any
>> bug, ANY bug whatsoever, which qualifies for the title "how GCC
>> currently behaves" because if a bug is currently present, then GCC
>> currently behaves in a buggy manner...
>>
>> ... any such bug is, ***because*** GCC currently does it, now part of
>> the documentation on "GNU C", a language dialect with documentation.
>>
>> Can you show me where on
>> https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html the GCC
>> documentation states that "C Extensions include anything that GCC
>> currently does, no matter what, no matter how documented or undocumented"?
> I see:
>
> `-Wno-implicit-int (C and Objective-C only)'
>       This option controls warnings when a declaration does not specify a
>       type.  This warning is enabled by default in C99 and later dialects
>       of C, and also by `-Wall'.
>
> `-Wno-implicit-function-declaration (C and Objective-C only)'
>       This option controls warnings when a function is used before being
>       declared.  This warning is enabled by default in C99 and later
>       dialects of C, and also by `-Wall'.  The warning is made into an
>       error by `-pedantic-errors'.
In the "C Extensions" section ?
>> The concept of a language extension has bulletproof meaning. You cannot
>> get around it, redefine it, pretend that something is when it isn't, or
>> otherwise disagree with this bulletproof meaning.
> The concept of a ``language extension'' is not defined anywhere.
> Instead, there are three kinds of behavior not precisely specified by
> the Standard:
>
>    - undefined behavior, the behavior upon use of an erroneous construct
>      for which the Standard imposes no requirements whatsoever.
>
>    - unspecified behavior, where upon the use of a construct for which
>      the Standard imposes two or more possible behaviors, and leaves the
>      selected behavior unspecified.
>
>    - implementation-defined behavior, unspecified behavior where each
>      implementation documents how the choice is made, and is required to
>      document that choice.
>
> If the translator precisely defines either undefined behavior (in this
> case, erroneous syntax) or unspecified behavior, then that definition is
> commonly considered to be an extension of that translator.  Nothing
> gcc.info says will change that.
>
>> The compiler defines an extension by writing about it in its
>> documentation on "GNU C extensions".
>>
>> Anything else you have to say on the topic is automatically wrong.
>>
>> Language has meaning. *Words* have meaning. The word "extension" has a
>> very specific meaning in the GCC documentation. You can read all about
>> it, here: https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
> GNU C documentation does not decide what is an extension and what is
> not.  In any case, if (gcc)C Extensions does not mention extensions
> currently implemented by GCC, then that is a bug in the documentation,
> is it not?  Documentation is supposed to reflect what the program being
> documented does, not the other way around.  Like the Standard says:
>
>    An implementation shall be accompanied by a document that defines all
>    implementation- defined and locale-specific characteristics and all
>    extensions.

By the same line of argumentation, any accepts-invalid is actually not a 
bug and should instead be considered a documentation bug that should be 
fixed by altering the documentation rather than fixing the actual bug 
(given that you appear to consider that making GCC not accept code that 
it previously accepted by default is something that should never be 
done). I hope you understand that's not a reasonable line of argumentation.

>> I did not dictate that you have to rewrite your code. You are replying
>> to something that has no relationship whatsoever to any form of
>> instruction, telling, or even ***advice***, and calling it dictation. I
>> reiterate: this paragraph was me ***observing*** a fact. That fact is
>> that if someone happens to do X, then they will not be affected by this
>> discussion.
>>
>> (X is, in this case, "someone wrote ANSI C code and also chose to use a
>> flag telling the compiler that it is ANSI C".)
>>
>>
>> But, furthermore, I would like to now clarify something anyway.
>>
>> You are not writing GNU C code, you never have been. GNU C code is
>> defined by the documentation for GNU C:
>> https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
>>
>> You may take this as me dictating to you that you are not to call this
>> code "GNU C".
> Really?  Then why is __GNUC__ defined, and why does it compile with
> `gcc'?
To be honest, I'd be inclined to consider the current behavior a 
longstanding bug that's been wrongly considered to be a WONTFIX for many 
years, and that we're only now getting around to fixing, if you really 
want to go down this line of argumentation.
>
>> My opinion on this is (still) that if your argument is that you don't
>> want -fpermissive or -std=c89 to be removed, you are more than welcome
>> to be skeptical about that (either one or both), but I don't see why
>> that is on topic for the question of whether things should be moved to
>> flags such as those while they do exist.
>>
>> If they want to remove -fpermissive, or -std=c89, out of an
>> unwillingness to provide compilers capable of being instructed to accept
>> and compile your coding style, then they will do so regardless of this
>> conversation.
>>
>> We might as well assume that the GCC developers are honest and truthful
>> people, otherwise it is *definitely* a waste of time asking them about
>> this change in the first place.
> How honest and truthful they are does not reflect whether or not the
> proposed new option will be kept around.  In fact, I observe that none
> of them have committed to supporting such an option indefinitely.

Actually, now that I think about it, what are you actually trying to get 
from this conversation ? If you're unsatisfied with a lack of commitment 
from the maintainers to maintain a `-fpermissive` option indefinitely, 
it seems like you can't possibly be satisfied with the current 
situation, either. It seems like what you actually want is an eternal 
commitment from the GCC developers to never ever change the behavior of 
GCC ever in any way that could ever break any of your old broken code...


  reply	other threads:[~2023-05-12 11:05 UTC|newest]

Thread overview: 246+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-09 12:15 Florian Weimer
2023-05-09 14:16 ` Dave Blanchard
2023-05-09 15:03 ` David Edelsohn
2023-05-09 15:07   ` Sam James
2023-05-09 15:35     ` Dave Blanchard
2023-05-09 15:58       ` Jonathan Wakely
2023-05-09 16:26       ` Arsen Arsenović
2023-05-09 15:14   ` Jonathan Wakely
2023-05-09 15:22     ` Dave Blanchard
2023-05-09 16:38       ` Arsen Arsenović
2023-05-09 16:57         ` Eli Zaretskii
2023-05-09 17:05           ` Sam James
2023-05-09 18:55             ` Eli Zaretskii
2023-05-09 17:15           ` Jonathan Wakely
2023-05-09 19:04             ` Eli Zaretskii
2023-05-09 19:07               ` Jakub Jelinek
2023-05-09 19:22                 ` Eli Zaretskii
2023-05-09 20:13                   ` David Edelsohn
2023-05-09 20:21                     ` Arsen Arsenović
2023-05-10  2:38                       ` Eli Zaretskii
2023-05-10  8:36                         ` Arsen Arsenović
2023-05-10 11:52                           ` Eli Zaretskii
2023-05-10 11:56                             ` Jonathan Wakely
2023-05-10 12:25                               ` Eli Zaretskii
2023-05-10 12:30                                 ` Jonathan Wakely
2023-05-10 12:44                                   ` Eli Zaretskii
2023-05-15 12:28                         ` Richard Earnshaw (lists)
2023-05-15 20:17                           ` Eric Gallager
2023-05-16  7:05                             ` Florian Weimer
2023-05-16 15:56                               ` Jason Merrill
2023-05-09 20:40                     ` Jonathan Wakely
2023-05-09 22:27                       ` David Edelsohn
2023-05-09 22:37                         ` Joel Sherrill
2023-05-09 22:45                           ` Jonathan Wakely
2023-05-10 10:40                             ` Eric Gallager
2023-05-10 10:45                               ` Sam James
2023-05-10 10:56                                 ` Neal Gompa
2023-05-10 12:06                                   ` Eli Zaretskii
2023-05-10 12:10                                     ` Neal Gompa
2023-05-10 12:41                                       ` Eli Zaretskii
2023-05-10 10:48                               ` Jonathan Wakely
2023-05-10 10:51                                 ` Jonathan Wakely
2023-05-10 12:00                               ` Eli Zaretskii
2023-05-10 12:42                                 ` Sam James
2023-05-10 15:10                             ` Joel Sherrill
2023-05-10 15:14                               ` Jakub Jelinek
2023-05-10 16:36                                 ` Joel Sherrill
2023-05-10 16:44                                   ` Jakub Jelinek
2023-05-10 17:05                                   ` Jonathan Wakely
2023-05-10 18:37                             ` James K. Lowden
2023-05-10 23:26                               ` Jonathan Wakely
2023-05-11 18:47                                 ` Jason Merrill
2023-05-10 23:33                               ` Sam James
2023-05-11  5:48                               ` Eli Zaretskii
2023-05-11  2:28                             ` Po Lu
2023-05-11  2:09                       ` Po Lu
2023-05-11  2:14                         ` Sam James
2023-05-11  2:23                           ` Po Lu
2023-05-11  3:14                             ` Eli Schwartz
2023-05-11  3:56                               ` Po Lu
2023-05-11  4:46                                 ` Eli Schwartz
2023-05-11  4:49                                   ` Eli Schwartz
2023-05-11  6:23                                     ` Po Lu
2023-05-11  6:18                                   ` Po Lu
2023-05-11 22:41                                     ` Eli Schwartz
2023-05-12  2:08                                       ` Po Lu
2023-05-12  3:07                                         ` Eli Schwartz
2023-05-12  5:57                                           ` Po Lu
2023-05-12 11:05                                             ` Gabriel Ravier [this message]
2023-05-12 13:53                                               ` Po Lu
2023-05-12 14:03                                                 ` Jonathan Wakely
2023-05-14 12:35                                                 ` Mark Wielaard
2023-05-12 11:48                                             ` Is the GNUC dialect anything that GCC does when given source code containing UB? (Was: More C type errors by default for GCC 14) Eli Schwartz
2023-05-12 13:07                                               ` Is the GNUC dialect anything that GCC does when given source code containing UB? Po Lu
2023-05-12  6:56                                           ` More C type errors by default for GCC 14 Eli Zaretskii
2023-05-12  7:28                                             ` Jonathan Wakely
2023-05-12 10:36                                               ` Eli Zaretskii
2023-05-12 13:19                                               ` Po Lu
2023-05-12 13:25                                                 ` Gabriel Ravier
2023-05-13  0:45                                                   ` Po Lu
2023-05-13  5:30                                                     ` Thomas Koenig
2023-05-13  5:53                                                       ` Po Lu
2023-05-14  5:10                                                         ` Eli Schwartz
2023-05-14  5:38                                                           ` Po Lu
2023-05-14  9:46                                                             ` David Brown
2023-05-14 10:21                                                               ` Jonathan Wakely
2023-05-14 10:23                                                                 ` Jonathan Wakely
2023-05-14  5:08                                                     ` Eli Schwartz
2023-05-14  5:28                                                       ` Po Lu
2023-05-14  5:56                                                         ` Eli Schwartz
2023-05-14 11:55                                                           ` Po Lu
2023-05-14 12:22                                                             ` Arsen Arsenović
2023-05-15  1:05                                                               ` Po Lu
2023-05-14  6:03                                                         ` Eli Schwartz
2023-05-14  8:47                                                         ` Jonathan Wakely
2023-05-14 12:05                                                           ` Po Lu
2023-05-14 12:48                                                             ` Nicholas Vinson
2023-05-14 10:29                                                         ` David Brown
2023-05-12 15:51                                                 ` Jason Merrill
2023-05-17 10:06                                                   ` Florian Weimer
2023-05-12 11:26                                         ` David Brown
2023-05-11  6:24                                   ` Eli Zaretskii
2023-05-11 22:43                                     ` Eli Schwartz
2023-05-12  2:38                                       ` Po Lu
2023-05-12  2:55                                         ` Jason Merrill
2023-05-12  6:01                                           ` Po Lu
2023-05-12  6:40                                             ` Jonathan Wakely
2023-05-12 13:23                                               ` Po Lu
2023-05-12 10:49                                             ` Pedro Alves
2023-05-12 13:26                                               ` Po Lu
2023-05-12 11:55                                             ` Eli Schwartz
2023-05-12 13:54                                               ` Po Lu
2023-05-12  6:49                                           ` Eli Zaretskii
2023-05-12  2:56                                         ` Sam James
2023-05-12  6:03                                           ` Po Lu
2023-05-12  3:06                                         ` Sam James
2023-05-12  6:25                                       ` Eli Zaretskii
2023-05-12 11:23                                         ` Gabriel Ravier
2023-05-11  6:12                               ` Eli Zaretskii
2023-05-11  7:04                                 ` Jonathan Wakely
2023-05-11 22:30                                 ` Eli Schwartz
2023-05-11 22:35                                   ` Sam James
2023-05-12  2:40                                     ` Po Lu
2023-05-12  2:52                                       ` Sam James
2023-05-12  5:32                                         ` Po Lu
2023-05-12  2:39                                   ` Po Lu
2023-05-12  3:18                                     ` Eli Schwartz
2023-05-12  6:17                                   ` Eli Zaretskii
2023-05-11  7:59                         ` David Brown
2023-05-09 21:00                     ` Thomas Koenig
2023-05-09 21:17                       ` Arsen Arsenović
2023-05-10 13:57                       ` Florian Weimer
2023-05-10 11:00                     ` David Brown
2023-05-11 10:49                       ` James K. Lowden
2023-05-11  1:38                     ` Po Lu
2023-05-11  1:43                       ` Sam James
2023-05-11  2:20                         ` Po Lu
2023-05-09 20:57                   ` Florian Weimer
2023-05-10  2:33                     ` Eli Zaretskii
2023-05-10  8:04                       ` Jonathan Wakely
2023-05-10  8:46                         ` Richard Biener
2023-05-10 12:26                           ` Florian Weimer
2023-05-10 11:30                         ` Eli Zaretskii
2023-05-10 12:03                           ` Jakub Jelinek
2023-05-10 12:36                             ` Eli Zaretskii
2023-05-10 12:41                               ` Gabriel Ravier
2023-05-10 14:14                                 ` Eli Zaretskii
2023-05-10 14:22                                   ` Jakub Jelinek
2023-05-10 15:30                                     ` Eli Zaretskii
2023-05-10 16:02                                       ` Jakub Jelinek
2023-05-10 16:31                                         ` Eli Zaretskii
2023-05-10 16:33                                           ` Richard Biener
2023-05-10 16:57                                             ` Eli Zaretskii
2023-05-10 17:08                                           ` Joseph Myers
2023-05-10 18:18                                             ` Eli Zaretskii
2023-05-12 15:02                                             ` Florian Weimer
2023-05-12 17:52                                               ` Florian Weimer
2023-05-12 17:55                                                 ` Gabriel Ravier
2023-05-12 18:00                                                   ` Florian Weimer
2023-05-12 18:08                                                   ` Alexander Monakov
2023-05-12 18:14                                                     ` Florian Weimer
2023-05-15 12:51                                                       ` Michael Matz
2023-05-16  8:55                                                         ` Florian Weimer
2023-05-16 10:39                                                           ` Alexander Monakov
2023-05-16 11:01                                                             ` Jakub Jelinek
2023-05-16 11:09                                                               ` Jonathan Wakely
2023-05-16 11:15                                                               ` Florian Weimer
2023-05-12 19:44                                               ` Joseph Myers
2023-05-12 20:43                                                 ` Florian Weimer
2023-05-12 20:18                                               ` Jason Merrill
2023-05-12 20:57                                                 ` Florian Weimer
2023-05-12 21:20                                                   ` Sam James
2023-05-12 21:21                                               ` Sam James
2023-05-12 21:37                                                 ` Florian Weimer
2023-05-12 21:47                                                   ` Sam James
2023-05-12 21:59                                                     ` Florian Weimer
2023-05-10 15:58                                   ` David Brown
2023-05-10 16:28                                     ` Eli Zaretskii
2023-05-11  6:52                                       ` David Brown
2023-05-11  7:39                                         ` Eli Zaretskii
2023-05-10 14:31                             ` Thomas Koenig
2023-05-10 15:37                               ` Eli Zaretskii
2023-05-11  2:38                         ` Po Lu
2023-05-11  7:38                           ` Arsen Arsenović
2023-05-11  8:31                             ` Po Lu
2023-05-11  8:44                               ` Arsen Arsenović
2023-05-11  9:28                                 ` Po Lu
2023-05-11 21:10                                   ` Arsen Arsenović
2023-05-12  1:41                                     ` Po Lu
2023-05-11 10:35                                 ` Eli Zaretskii
2023-05-11 19:25                                   ` Arsen Arsenović
2023-05-12  2:36                                     ` Po Lu
2023-05-12 12:30                                       ` Gabriel Ravier
2023-05-12 13:56                                         ` Po Lu
2023-05-12  7:53                                     ` Eli Zaretskii
2023-05-12  8:15                                       ` Jakub Jelinek
2023-05-12 10:40                                         ` Eli Zaretskii
2023-05-12  8:45                                       ` Christian Groessler
2023-05-12 10:14                                         ` Jonathan Wakely
2023-05-12  9:11                                       ` Thomas Koenig
2023-05-11  8:53                               ` Jonathan Wakely
2023-05-11  9:29                                 ` Po Lu
2023-05-10  8:49               ` David Brown
2023-05-10 11:37                 ` Eli Zaretskii
2023-05-10 11:49                   ` Jonathan Wakely
2023-05-10 12:22                     ` Eli Zaretskii
2023-05-10 13:30                       ` David Brown
2023-05-10 14:39                         ` Eli Zaretskii
2023-05-10 15:21                           ` Paul Koning
2023-05-10 16:20                           ` David Brown
2023-05-10 16:48                             ` Eli Zaretskii
2023-05-10 12:32                   ` Sam James
2023-05-10 12:47                     ` Eli Zaretskii
2023-05-09 19:33           ` Arsen Arsenović
2023-05-09 15:25     ` David Edelsohn
2023-05-11  1:25     ` Po Lu
2023-05-11  1:30       ` Sam James
2023-05-11  1:33       ` Sam James
2023-05-11  2:18         ` Po Lu
2023-05-11  6:44           ` Jonathan Wakely
2023-05-11  8:32             ` Po Lu
2023-05-11  8:52               ` Jonathan Wakely
2023-05-11  7:36       ` Arsen Arsenović
2023-05-11  8:23         ` Po Lu
2023-05-09 18:22   ` Florian Weimer
2023-05-11 21:32     ` Segher Boessenkool
2023-05-09 15:16 ` Richard Biener
2023-05-09 16:05   ` Jakub Jelinek
2023-05-09 16:11     ` Sam James
2023-05-09 16:13     ` David Edelsohn
     [not found]       ` <BBE9950C-28AA-4A1C-A4C5-7F486538004E@gmail.com>
2023-05-09 16:44         ` Florian Weimer
2023-05-09 16:58           ` Ian Lance Taylor
2023-05-09 17:08           ` Jason Merrill
2023-05-09 17:16             ` Sam James
2023-05-09 16:59   ` Florian Weimer
2023-05-09 17:07     ` Sam James
2023-05-09 17:35       ` Florian Weimer
2023-05-11 15:21 ` Peter0x44
2023-05-12  9:33 ` Martin Jambor
2023-05-12 12:30   ` Jakub Jelinek
2023-05-15 12:46     ` Michael Matz
2023-05-15 13:14     ` Richard Earnshaw (lists)
2023-05-10 12:41 Marcin Jaczewski
2023-05-10 14:19 ` Eli Zaretskii
2023-05-10 13:10 Basile Starynkevitch
2023-05-10 14:20 ` David Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b71bf6a2-2527-e970-f46c-ea6116d694d3@gmail.com \
    --to=gabravier@gmail.com \
    --cc=eschwartz93@gmail.com \
    --cc=gcc@gcc.gnu.org \
    --cc=luangruo@yahoo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).