aaron.ballman added a reviewer: aaron.ballman.
aaron.ballman added inline comments.


================
Comment at: lib/CodeGen/TargetInfo.cpp:8966
+
+    const RISCVInterruptAttr *Attr = FD->getAttr<RISCVInterruptAttr>();
+    if (!Attr)
----------------
You can use `const auto *` here instead of repeating the type.


================
Comment at: lib/Sema/SemaDeclAttr.cpp:5280
+  // Check the attribute arguments.
+  if (AL.getNumArgs() > 1) {
+    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments)
----------------
Please call `checkAttributeNumArgs()` instead; the error you're using is 
incorrect (it's used for variadic parameters where you receive more arguments 
than you expect).


================
Comment at: lib/Sema/SemaDeclAttr.cpp:5301
+
+  if (!isFunctionOrMethod(D)) {
+    S.Diag(D->getLocation(), diag::warn_attribute_wrong_decl_type)
----------------
I don't think you need to perform this check -- I believe it's handled 
automatically (because you don't have custom parsing enabled).


================
Comment at: test/Sema/riscv-interrupt-attr.c:18
+
+__attribute__((interrupt("user"), interrupt("supervisor"))) void foo6() { } // 
expected-warning {{repeated RISC-V 'interrupt' attribute}} \
+                                                                            // 
expected-note {{repeated RISC-V 'interrupt' attribute is here}}
----------------
You should also add tests for:
```
__attribute__((interrupt("user"))) void f(void);
__attribute__((interrupt("machine"))) void f(void);

void f(void) { }

[[gnu::interrupt("user") gnu::interrupt("machine")]] void g() {}

[[gnu::interrupt("user")]] [[gnu::interrupt("machine")]] void h() {}
```


================
Comment at: test/Sema/riscv-interrupt-attr.c:23
+                                                      // expected-note 
{{repeated RISC-V 'interrupt' attribute is here}}
+__attribute__((interrupt("user"))) void foo8() {}
+__attribute__((interrupt("supervisor"))) void foo9() {}
----------------
Do you intend for functions without a prototype to be accepted? foo8() can be 
passed an arbitrary number of arguments, which is a bit different than what I 
thought you wanted the semantic check to be.


================
Comment at: test/Sema/riscv-interrupt-attr.c:26
+__attribute__((interrupt("machine"))) void foo10() {}
+__attribute__((interrupt(""))) void foo11() {}
+__attribute__((interrupt())) void foo12() {}
----------------
I'm a bit surprised that this is not an error -- the argument is provided, so I 
don't know why this should be treated as acceptable.


https://reviews.llvm.org/D48412



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

Reply via email to