
Fixes https://github.com/llvm/llvm-project/issues/58637. Adds `isAlignas()` method on `AttributeCommonInfo` which accounts for C++ `alignas` as well as C11 `_Alignas`. The method is used to improve diagnostic in C when `_Alignas` is used in C at the wrong location. This corrects the previously suggested move of `_Alignas` past the declaration specifier, now warns attribute `_Alignas` is ignored. Based on https://reviews.llvm.org/D141177.
15 lines
578 B
C
15 lines
578 B
C
// RUN: %clang_cc1 -std=c11 -fsyntax-only -verify %s
|
|
// RUN: not %clang_cc1 -std=c99 -pedantic -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-EXT %s
|
|
|
|
_Alignas(4) char c1;
|
|
unsigned _Alignas(long) char c2;
|
|
char _Alignas(16) c3;
|
|
|
|
char c4 _Alignas(32); // expected-error {{expected ';' after top level declarator}} expected-warning {{declaration does not declare anything}}
|
|
|
|
char _Alignas(_Alignof(int)) c5;
|
|
|
|
_Alignas(int) struct c6; // expected-warning {{'_Alignas' attribute ignored}}
|
|
// CHECK-EXT: '_Alignas' is a C11 extension
|
|
// CHECK-EXT: '_Alignof' is a C11 extension
|