aaron.ballman marked 2 inline comments as done.
aaron.ballman added inline comments.


================
Comment at: clang/docs/ReleaseNotes.rst:169
+  As of C2x, support for implicit int has been removed, and the warning options
+  will have no effect. Specifying ``-Wimplicit-int`` in C89 mode will now issue
+  warnings instead of being a noop.
----------------
erichkeane wrote:
> I find myself thinking that despite it being 'valid code' that 
> `-Wimplicit-int` should be on-by-default in C89 mode. We often warn about 
> 'valid, but non-future-proof' code, by default, particularly when they are 
> code-breaking like this is.
On the one hand, yes. On the other hand, this is only for people who specify 
`-std=c89` explicitly (which is not the default language mode for C), and I 
think we've been taking the viewpoint that these folks are mostly trying to 
keep old, mostly unmaintained code working.


================
Comment at: clang/include/clang/Basic/LangOptions.h:534
+  /// Returns true if implicit int is supported at all.
+  bool implicitIntEnabled() const { return !CPlusPlus && !C2x; }
+
----------------
erichkeane wrote:
> cor3ntin wrote:
> > erichkeane wrote:
> > > This name seems inverse of what you mean to me?  IDK if you're 
> > > bike-shed-sniping me here, but:
> > > 
> > > `prohibitsImplicitInt` to be the reverse of above? It becomes SLIGHTLY 
> > > ambiguous to me (in that we don't mean "the language standard prohibits", 
> > > we mean "the compiler implementation prohibits"), but that can be fixed 
> > > up with a comment.
> > > 
> > > If you want to keep the direction, perhaps `implicitIntPermitted`, at 
> > > which point I might suggest the one above become `implicitIntRequired`.
> > @erichkeane `requiresImplicitInt` is only used twice. Does it needs a name?
> > 
> *shrug*, I tend to be of the feeling that if you have to say something this 
> often, and functions are basically free, mind as well make one.
The idea here is that `requiresImplicitInt()` tells you when the support is 
mandatory per spec, and `implicitIntEnabled()` tells you when the support is 
either mandatory or an extension. I'm not strongly tied to the names, how do 
these sound?

`isImplicitIntRequired()` and `isImplicitIntAllowed()`?

(I could also add the word `Support` in there as in 
`isImplicitIntSupportRequired()` but then the function names start to get a bit 
longer than I think is reasonable.)


================
Comment at: clang/lib/Parse/Parser.cpp:1198
 
   // If this is C90 and the declspecs were completely missing, fudge in an
   // implicit int.  We do this here because this is the only place where
----------------
erichkeane wrote:
> C90?
I'll fix the comment up. This confusion exists all over the place. :-D


================
Comment at: clang/lib/Sema/SemaDecl.cpp:14329
       if (FTI.Params[i].Param == nullptr) {
-        SmallString<256> Code;
-        llvm::raw_svector_ostream(Code)
-            << "  int " << FTI.Params[i].Ident->getName() << ";\n";
-        Diag(FTI.Params[i].IdentLoc, diag::ext_param_not_declared)
-            << FTI.Params[i].Ident
-            << FixItHint::CreateInsertion(LocAfterDecls, Code);
+        if (getLangOpts().C99) {
+          SmallString<256> Code;
----------------
erichkeane wrote:
> cor3ntin wrote:
> > erichkeane wrote:
> > > IMO there should be a warning here for C89.  Warning for non-future-proof 
> > > code is pretty typical.
> > Isn't the counter argument that was made on similar changes that people 
> > specifically asking for C89 have peculiar expectations?
> > Otherwise i agree
> Yep, folks asking for C89 ARE peculiar :D  However, warnings-not-as-error 
> are, IMO, simply 'helpful'. 
Same here as above -- we *could* warn, but I suspect it wouldn't be 
particularly helpful. The fact that we were warning with an extension warning 
was non-conforming though (we shouldn't fail `-pedantic-errors` in C89 over 
that).


================
Comment at: clang/lib/Sema/SemaDecl.cpp:14342-14343
         DeclSpec DS(attrs);
-        const char* PrevSpec; // unused
-        unsigned DiagID; // unused
+        const char *PrevSpec; // unused
+        unsigned DiagID;      // unused
         DS.SetTypeSpecType(DeclSpec::TST_int, FTI.Params[i].IdentLoc, PrevSpec,
----------------
erichkeane wrote:
> cor3ntin wrote:
> > Nitpick: whitespace only change
> This might be a clang-format thing based on the previous line.
Yeah, clang-format got a bit aggressive there, I'll be the formatting changes 
out, thanks!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124258/new/

https://reviews.llvm.org/D124258

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to