[cfe-commits] [PATCH] Clang support for MemorySanitizer

Chandler Carruth chandlerc at gmail.com
Fri Nov 30 03:01:07 PST 2012



================
Comment at: llvm/tools/clang/include/clang/Basic/DiagnosticDriverKinds.td:104-107
@@ -103,2 +103,6 @@
   "AddressSanitizer on Android requires '-pie'">;
+def err_drv_tsan_requires_pie : Error<
+  "ThreadSanitizer requires '-pie'">;
+def err_drv_msan_requires_pie : Error<
+  "MemorySanitizer requires '-pie'">;
 def err_drv_unknown_objc_runtime : Error<
----------------
Evgeniy Stepanov wrote:
> Dmitri Gribenko wrote:
> > Chandler Carruth wrote:
> > > You don't need two diagnostics:
> > > 
> > >   def err_drv_sanitizer_requires_pie : Error<
> > >     "%select{thread|memory}0 sanitizer requires the '-pie' option">;
> > I think it is better to use two diagnostics since %select would require magic numbers in the source.
> I also prefer two diagnosticts.
> 
> Btw, %select{a|b}0 evaluates to "b" if true, and "a" if false. I find this _really_ weird.
> 
I don't like that pattern any more than you do, but Clang's diagnostics use it *extensively*, adding a comment next to the magic number indicating which is which.

I also dislike the duplicated text intensely.

A good solution would be something like this:

  def err_drv_sanitizer_requires_pie : Error<
    "%select{thread|memory}0 sanitizer requires the '-pie' option">,
    SelectNames<0, { SDK_Thread, SDK_Memory }>;

Where this automatically teaches the diagnostic engine that select #0 should accept a specific enum rather than an unsigned, and defines that enum in the diag namespace with the given enumerators.

But this would be a huge (good) change and shouldn't be in this patch. I think I mildly prefer consistency with other diagnostics until we get something like this.

================
Comment at: llvm/tools/clang/include/clang/Basic/DiagnosticDriverKinds.td:104-107
@@ -103,2 +103,6 @@
   "AddressSanitizer on Android requires '-pie'">;
+def err_drv_tsan_requires_pie : Error<
+  "ThreadSanitizer requires '-pie'">;
+def err_drv_msan_requires_pie : Error<
+  "MemorySanitizer requires '-pie'">;
 def err_drv_unknown_objc_runtime : Error<
----------------
Chandler Carruth wrote:
> Evgeniy Stepanov wrote:
> > Dmitri Gribenko wrote:
> > > Chandler Carruth wrote:
> > > > You don't need two diagnostics:
> > > > 
> > > >   def err_drv_sanitizer_requires_pie : Error<
> > > >     "%select{thread|memory}0 sanitizer requires the '-pie' option">;
> > > I think it is better to use two diagnostics since %select would require magic numbers in the source.
> > I also prefer two diagnosticts.
> > 
> > Btw, %select{a|b}0 evaluates to "b" if true, and "a" if false. I find this _really_ weird.
> > 
> I don't like that pattern any more than you do, but Clang's diagnostics use it *extensively*, adding a comment next to the magic number indicating which is which.
> 
> I also dislike the duplicated text intensely.
> 
> A good solution would be something like this:
> 
>   def err_drv_sanitizer_requires_pie : Error<
>     "%select{thread|memory}0 sanitizer requires the '-pie' option">,
>     SelectNames<0, { SDK_Thread, SDK_Memory }>;
> 
> Where this automatically teaches the diagnostic engine that select #0 should accept a specific enum rather than an unsigned, and defines that enum in the diag namespace with the given enumerators.
> 
> But this would be a huge (good) change and shouldn't be in this patch. I think I mildly prefer consistency with other diagnostics until we get something like this.
The idea is to model an enumeration of selectors, not a bool... The value accepted by the diagnostic engine is technically an 'unsigned'.


http://llvm-reviews.chandlerc.com/D146



More information about the cfe-commits mailing list