Files
clang-p2996/clang/test/Sema/attr-wasm.c
Dan Gohman 0d4e243456 [WebAssembly] Improve clang diagnostics for wasm attributes
This patch addresses the review comments on r352930:

 - Removes redundant diagnostic checking code
 - Removes errnoneous use of diag::err_alias_is_definition, which
   turned out to be ineffective anyway since functions can be defined later
   in the translation unit and avoid detection.
 - Adds a test for various invalid cases for import_name and import_module.

This reapplies D59520, with the addition of adding
`InGroup<IgnoredAttributes>` to the new warnings, to fix the
Misc/warning-flags.c failure.

Differential Revision: https://reviews.llvm.org/D59520
2020-06-05 14:32:51 -07:00

28 lines
1.6 KiB
C

// RUN: %clang_cc1 -triple wasm32-unknown-unknown -fsyntax-only -verify %s
void name_a() __attribute__((import_name)); //expected-error {{'import_name' attribute takes one argument}}
int name_b __attribute__((import_name("foo"))); //expected-error {{'import_name' attribute only applies to functions}}
void name_c() __attribute__((import_name("foo", "bar"))); //expected-error {{'import_name' attribute takes one argument}}
void name_d() __attribute__((import_name("foo", "bar", "qux"))); //expected-error {{'import_name' attribute takes one argument}}
void name_z() __attribute__((import_name("foo"))); //expected-note {{previous attribute is here}}
void name_z() __attribute__((import_name("bar"))); //expected-warning {{import name (bar) does not match the import name (foo) of the previous declaration}}
void module_a() __attribute__((import_module)); //expected-error {{'import_module' attribute takes one argument}}
int module_b __attribute__((import_module("foo"))); //expected-error {{'import_module' attribute only applies to functions}}
void module_c() __attribute__((import_module("foo", "bar"))); //expected-error {{'import_module' attribute takes one argument}}
void module_d() __attribute__((import_module("foo", "bar", "qux"))); //expected-error {{'import_module' attribute takes one argument}}
void module_z() __attribute__((import_module("foo"))); //expected-note {{previous attribute is here}}
void module_z() __attribute__((import_module("bar"))); //expected-warning {{import module (bar) does not match the import module (foo) of the previous declaration}}
void both() __attribute__((import_name("foo"), import_module("bar")));