I'm mostly happy with this patch. Accepting it, so that you can land it without 
yet another round of review, but please consider addressing the comments below.

Thank you for doing this!


================
Comment at: lib/Driver/SanitizerArgs.cpp:147
@@ +146,3 @@
+      Add &= ~TrapRemove;
+      if ((Add & ~TrappingSupportedWithGroups) != 0) {
+        SanitizerSet S;
----------------
  if (SanitizerMask InvalidValues = Add & ~TrappingSupportedWithGroups) {
    SanitizerSet S;
    S.Mask = InvalidValues;
    //....
  }

================
Comment at: lib/Driver/SanitizerArgs.cpp:165
@@ +164,3 @@
+      Arg->claim();
+      TrapRemove |= Undefined | UndefinedGroup;
+    }
----------------
  TrapRemove |= expandSanitizerGroups(UndefinedGroup);

================
Comment at: lib/Driver/SanitizerArgs.cpp:239
@@ +238,3 @@
+      SanitizerMask KindsToDiagnose = Add & NotSupported & ~DiagnosedKinds;
+      if (KindsToDiagnose & Vptr) {
+        D.Diag(diag::err_drv_argument_not_allowed_with)
----------------
I don't think this is right. Suppose `-fsanitize=vptr` is not supported on 
target foo (by corresponding toolchain). Then
  clang -target foo -fsanitize=vptr a.cc
would produce confusing
  "-fsanitize=vptr" is not allowed with "-fsanitize-trap=undefined"

I think you would need separate clause for that
  if (SanitizerMask KindsToDiagnose = Add & TrappingKinds & NotAllowedWithTrap 
& ~DiagnosedKinds) {
    std::string Desc = describeSanitizeArg(*I, KindsToDiagnose);
    D.Diag(diag::err_drv_argument_not_allowed_with) << Desc << 
lastTrapArgumentForMask(KindsToDiagnose);
    DiagnosedKinds |= KindsToDiagnose;
  }

http://reviews.llvm.org/D10464

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to